macOSで、PHPをソースからビルド、Apacheと連携する
        主題
        macOSで、PHPをソースからビルド、Apacheと連携する手順を述べる。(最終更新日:2025.10.03)
    
        背景
        Big Surになって融通の効かなくなった、OSビルトインのApache Webサーバーの代わりに、別のApache Webサーバーを導入した。
        せっかくなので、PHPを導入し、Apacheから使えるようにすることにした。なお、PHPを自前ビルドした理由は、OSビルトインのPHPをバージョン確認すると、将来削除するで〜
と警告するせいでもある。(macOS 13 Venturaで削除された)
    
手順
- 
Apacheのコンパイルとインストール 
 当然のことだが、Apacheは導入済みとして話を進める。未導入の場合は、この記事に沿って導入されたい。
- 
PHP導入に必要な項目のコンパイルとインストール - 
環境変数の設定 export SDKROOT="$(xcrun --sdk macosx --show-sdk-path)"
- 
pkg-configのコンパイル&インストール curl -LO https://pkg-config.freedesktop.org/releases/pkg-config-0.29.2.tar.gz tar xf pkg-config-0.29.2.tar.gz cd pkg-config-0.29.2 ./configure --with-internal-glib make sudo make install
- 
cmakeのコンパイルとインストール(更新) cmakeのダウンロード(共通) curl -LO https://github.com/Kitware/CMake/releases/download/v4.1.2/cmake-4.1.2.tar.gz tar xf cmake-4.1.2.tar.gz cd cmake-4.1.2JRE、JDKがインストールされていない場合は、以下を実行する。 rm Modules/FindJava.cmake curl -OJL "https://docs.google.com/uc?export=download&id=0B2uOKVwFe1AXU1QzdXlvc0VRSEU" patch -p1 < cmake_CMakeLists.patchcmakeのコンパイル(共通) ./bootstrap; make -j$(sysctl -n hw.ncpu); sudo make install
- 
OpenSSLのコンパイルとインストール(更新) curl -LO https://github.com/openssl/openssl/releases/download/openssl-3.5.4/openssl-3.5.4.tar.gz tar xf openssl-3.5.4.tar.gz cd openssl-3.5.4 ./config --openssldir=/usr/local/ssl make && sudo make install
- 
GNU bisonのコンパイルとインストール curl -LO https://ftp.gnu.org/gnu/bison/bison-3.8.2.tar.xz tar xf bison-3.8.2.tar.xz cd bison-3.8.2 ./configure --prefix=/usr/local/gnu_bison make sudo make install
- 
re2cのコンパイルとインストール curl -LO https://github.com/skvadrik/re2c/releases/download/4.3/re2c-4.3.tar.xz tar xf re2c-4.3.tar.xz cd re2c-4.3 ./configure --prefix=/usr/local/re2c make CXXFLAGS="-Wno-switch-default -Wno-shadow" sudo make installsudo ln -s /usr/local/re2c/bin/re2c /usr/local/bin/re2c
- 
libxml2のコンパイルとインストール(更新) curl -LO https://download.gnome.org/sources/libxml2/2.14/libxml2-2.14.6.tar.xz tar xf libxml2-2.14.6.tar.xz cd libxml2-2.14.6 ./configure --without-python make sudo make install
- 
SQLiteのコンパイルとインストール curl -LO https://www.sqlite.org/2025/sqlite-autoconf-3500400.tar.gz tar xf sqlite-autoconf-3500400.tar.gz cd sqlite-autoconf-3500400 export LDFLAGS="-L/usr/local/sqlite3/lib -Wl,-install_name,/usr/local/sqlite3/lib/libsqlite3.dylib" export CPPFLAGS="-I/usr/local/sqlite3/include -DSQLITE_ENABLE_COLUMN_METADATA -DSQLITE_ENABLE_UNLOCK_NOTIFY -DSQLITE_THREADSAFE=1" ./configure --prefix=/usr/local/sqlite3 make sudo make install unset CPPFLAGS unset LDFLAGSsudo ln -s /usr/local/sqlite3/lib/pkgconfig/sqlite3.pc /usr/local/lib/pkgconfig/sqlite3.pc
- 
libpslのコンパイルとインストール curl -LO https://github.com/rockdaboot/libpsl/releases/download/0.21.5/libpsl-0.21.5.tar.gz tar xf libpsl-0.21.5.tar.gz cd libpsl-0.21.5 ./configure make sudo make install
- 
OpenLDAPのコンパイルとインストール 
 phpのコンフィギュア時にエラーになるので、導入する。curl -LO https://www.openldap.org/software/download/OpenLDAP/openldap-release/openldap-2.6.10.tgz tar xf openldap-2.6.10.tgz cd openldap-2.6.10 ./configure --prefix=/usr/local/openldap --sysconfdir=/usr/local/etc --localstatedir=/usr/local/var --enable-accesslog --enable-auditlog --enable-constraint --enable-dds --enable-deref --enable-dyngroup --enable-dynlist --enable-memberof --enable-ppolicy --enable-proxycache --enable-refint --enable-retcode --enable-seqmod --enable-translucent --enable-unique --enable-valsort --without-systemd make depend make SOELIM=mandoc_soelim sudo make install SOELIM=mandoc_soelimsudo ln -s /usr/local/openldap/lib/pkgconfig/ldap.pc /usr/local/lib/pkgconfig/ldap.pc sudo ln -s /usr/local/openldap/lib/pkgconfig/lber.pc /usr/local/lib/pkgconfig/lber.pc
- 
libcurlのコンパイルとインストール(更新) 
 libpsl、ldapはlibcurlの依存ライブラリである。curl -LO https://curl.se/download/curl-8.16.0.tar.xz tar xf curl-8.16.0.tar.xz cd curl-8.16.0 ./configure --prefix=/usr/local/curl --with-openssl make sudo make installsudo ln -s /usr/local/curl/lib/pkgconfig/libcurl.pc /usr/local/lib/pkgconfig/libcurl.pc
- 
libiconvのコンパイルとインストール curl -LO https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.18.tar.gz tar xf libiconv-1.18.tar.gz cd libiconv-1.18 ./configure --prefix=/usr/local/libiconv make sudo make install
- 
onigurumaのコンパイルとインストール curl -LO https://github.com/kkos/oniguruma/releases/download/v6.9.10/onig-6.9.10.tar.gz tar xf onig-6.9.10.tar.gz cd onig-6.9.10 ./configure --prefix=/usr/local/oniguruma make sudo make installsudo ln -s /usr/local/oniguruma/lib/pkgconfig/oniguruma.pc /usr/local/lib/pkgconfig/oniguruma.pc
- 
libjpegのコンパイルとインストール curl -LO https://www.ijg.org/files/jpegsrc.v9f.tar.gz tar xf jpegsrc.v9f.tar.gz cd jpeg-9f ./configure make sudo make install
- 
libpngのコンパイルとインストール curl -LO https://download.sourceforge.net/libpng/libpng-1.6.50.tar.xz tar xf libpng-1.6.50.tar.xz cd libpng-1.6.50 ./configure make sudo make install
- 
libzipのコンパイルとインストール curl -LO https://libzip.org/download/libzip-1.11.4.tar.xz tar xf libzip-1.11.4.tar.xz cd libzip-1.11.4 mkdir build cd build cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/libzip make sudo make installsudo ln -s /usr/local/libzip/lib/pkgconfig/libzip.pc /usr/local/lib/pkgconfig/libzip.pc
- 
zlibのコンパイルとインストール curl -LO https://www.zlib.net/zlib-1.3.1.tar.xz tar xf zlib-1.3.1.tar.xz cd zlib-1.3.1 ./configure make test sudo make install
 
- 
- 
PHPのコンパイルとインストール(更新) curl -LO https://www.php.net/distributions/php-8.4.13.tar.xz tar xf php-8.4.13.tar.xz cd php-8.4.13 ./configure --prefix=/usr/local/php \ --enable-cli \ --enable-mbstring \ --enable-xml \ --enable-fpm \ --enable-ftp \ --enable-exif \ --enable-fileinfo \ --enable-gd \ --enable-pcntl \ --enable-pdo \ --with-curl \ --with-curl=/usr \ --with-jpeg \ --with-openssl \ --with-iconv=/usr/local/libiconv \ --with-apxs2=/usr/local/apache2/bin/apxs \ --with-mysqli \ --with-pdo-mysql \ --with-sqlite3 \ --with-zip \ --with-zlib make sudo apachectl stop sudo make installsudo ln -s /usr/local/php/bin/php /usr/local/bin/phpPHPインストールの段階でapacheを止めておく。止めないでlibphp.soを入れ替えると、apachectlコマンドを実行した時に、apachectl: line 79: xxxxx Killed: 9や、httpd: Syntax error(Library not loaded:)というエラーが出る。 
- 
php.iniのコピー、設定および設置 
 phpの初期設定ファイルphp.iniは、ダウンロードしたソースコードフォルダphp-8.4.10 直下にphp.ini-development およびphp.ini-production というファイル名で入っている。どちらかを選んでコピー、php.ini にリネームの上、以下のように設置する。(この設置場所はphp –ini を実行すると表示されるものに合わせている)sudo cp -p php.ini /usr/local/php/lib設置前、つまりコピー&リネームした段階で、ファイルをテキストエディタで開き、PHP7.4 ぼくのかんがえたさいきょうのphp.iniを参照して編集すること。 
- 
Apache側の設定(Apacheのhttpd.confにPHPを設定) 
 PHPインストールによって、libphp.so は、/usr/local/apache2/modules にコピーされ、httpd.confにもロードされるように書き込まれる。これを含めてhttpd.confを変更する方法と、PHPについての設定ファイルを作成、httpd.confに読み込ませる方法のどちらかを好みで使用されたい。- 
httpd.confを変更する方法。変更をdiff形式で示す。 vim /usr/local/apache2/conf/httpd.confdiff -u httpd.conf.bak httpd.conf --- httpd.conf.bak 2021-07-18 17:03:59.000000000 +0900 +++ httpd.conf 2021-07-18 17:03:59.000000000 +0900 @@ -163,6 +163,7 @@ LoadModule userdir_module modules/mod_userdir.so LoadModule alias_module modules/mod_alias.so #LoadModule rewrite_module modules/mod_rewrite.so +LoadModule php_module modules/libphp.so <IfModule unixd_module> # @@ -262,9 +263,13 @@ # is requested. # <IfModule dir_module> - DirectoryIndex index.html + DirectoryIndex index.php index.html </IfModule> +<FilesMatch \.php$> + SetHandler application/x-httpd-php +</FilesMatch> + # # The following lines prevent .htaccess and .htpasswd files from being # viewed by Web clients.
- 
PHP用設定ファイルを用意し、httpd.confに読み込ませる方法 - 
共有オブジェクトファイルの準備 cd php-8.4.13/libs sudo mkdir -p /usr/local/php/lib/httpd/modules sudo cp -p libphp.so /usr/local/php/lib/httpd/modules
- 
PHP用設定ファイル(php.conf) sudo vim /usr/local/apache2/conf/extra/php.conf# httpd.confにphpをincludeする設定ファイル # # PHPの場所 : /usr/local/bin/php # 対象バージョン : PHP 8.4.12 (cli) (built: Aug 29 2025 10:50:41) (ZTS) # # これ↓をhttpd.confに追記する #Include /usr/local/apache2/conf/extra/php.conf # # AddType allows you to add to or override the MIME configuration # file specified in TypesConfig for specific file types. # AddType application/x-httpd-php .php # # Dynamic Shared Object (DSO) Support # # To be able to use the functionality of a module which was built as a DSO you # have to place corresponding `LoadModule' lines at this location so the # directives contained in it are actually available _before_ they are used. # Statically compiled modules (those listed by `httpd -l') do not need # to be loaded here. # LoadModule php_module /usr/local/php/lib/httpd/modules/libphp.so # # DirectoryIndex: sets the file that Apache will serve if a directory # is requested. # <IfModule dir_module> DirectoryIndex index.php </IfModule> # # php.iniの場所 # PHPIniDir "/usr/local/php/lib/php.ini"
- 
httpd.confの読み込み設定。変更をdiff形式で示す。 sudo vim /usr/local/apache2/conf/httpd.confdiff -u httpd.conf.bak httpd.conf --- httpd.conf.bak 2021-07-19 12:34:39.000000000 +0900 +++ httpd.conf 2021-07-19 12:46:56.000000000 +0900 @@ -163,6 +163,7 @@ LoadModule userdir_module modules/mod_userdir.so LoadModule alias_module modules/mod_alias.so #LoadModule rewrite_module modules/mod_rewrite.so -LoadModule php_module modules/libphp.so +#LoadModule php_module modules/libphp.so <IfModule unixd_module> # @@ -517,5 +518,5 @@ SSLRandomSeed connect builtin </IfModule> +Include /usr/local/apache2/conf/extra/php.conf
 
- 
 
- 
- 
Apacheの起動 sudo apachectl start
- 
Apacheとphpの連携確認 echo "<?php phpinfo();?>" > ~/Sites/info.phpブラウザのアドレス欄に http://localhost/~user_name/info.php と入力(user_nameは、ご自身のログイン名に変える)し、PHPの情報が表示されるのを確認する。
参考サイト
- OSXで最新のPHPをビルドする方法
- PHP 7.3をビルドしてApacheと連携させる
- PHP7.4 ぼくのかんがえたさいきょうのphp.ini
- Apacheのhttpd.confにPHPを設定する方法
- macOS CatalinaのApacheでlocalhostにアクセスしたかった
以上。
この投稿へのトラックバック
トラックバックはありません。
- トラックバック URL
 
					 
					 
					
この投稿へのコメント