macOSで、PHPをソースからビルド、Apacheと連携する
主題
macOSで、PHPをソースからビルド、Apacheと連携する手順を述べる。(最終更新日:2024.12.20)
背景
Big Surになって融通の効かなくなった、OSビルトインのApache Webサーバーの代わりに、別のApache Webサーバーを導入した。
せっかくなので、PHPを導入し、Apacheから使えるようにすることにした。なお、PHPを自前ビルドした理由は、OSビルトインのPHPをバージョン確認すると、将来削除するで〜
と警告するせいでもある。(macOS 13 Venturaで削除された)
手順
-
Apacheのコンパイルとインストール
当然のことだが、Apacheは導入済みとして話を進める。未導入の場合は、この記事に沿って導入されたい。 -
PHP導入に必要な項目のコンパイルとインストール
-
Clangの警告をなくすおまじない(SDKのバージョンは筆者の例)
export CFLAGS="-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk" export CXXFLAGS="-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk"
-
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のコンパイルとインストール(更新)
curl -LO https://github.com/Kitware/CMake/releases/download/v3.31.2/cmake-3.31.2.tar.gz tar xf cmake-3.31.2.tar.gz cd cmake-3.31.2 rm Modules/FindJava.cmake curl -OJL "https://docs.google.com/uc?export=download&id=0B2uOKVwFe1AXU1QzdXlvc0VRSEU" patch -p1 < cmake_CMakeLists.patch ./bootstrap; make; sudo make install
JRE, JDKが入っている環境では、4-6行目の作業は必要ない。
-
OpenSSLのコンパイルとインストール
curl -LO https://github.com/openssl/openssl/releases/download/openssl-3.4.0/openssl-3.4.0.tar.gz tar xf openssl-3.4.0.tar.gz cd openssl-3.4.0 ./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.0.2/re2c-4.0.2.tar.xz tar xf re2c-4.0.2.tar.xz cd re2c-4.0.2 ./configure --prefix=/usr/local/re2c make sudo make install
sudo ln -s /usr/local/re2c/bin/re2c /usr/local/bin/re2c
-
libxml2のコンパイルとインストール(更新)
curl -LO https://download.gnome.org/sources/libxml2/2.13/libxml2-2.13.5.tar.xz tar xf libxml2-2.13.5.tar.xz cd libxml2-2.13.5 ./configure --prefix=/usr/local/libxml2 --without-python make sudo make install
sudo ln -s /usr/local/libxml2/lib/pkgconfig/libxml-2.0.pc /usr/local/lib/pkgconfig/libxml-2.0.pc
-
SQLite3のコンパイルとインストール(更新)
curl -LO https://www.sqlite.org/2024/sqlite-autoconf-3470200.tar.gz tar xf sqlite-autoconf-3470200.tar.gz cd sqlite-autoconf-3470200 ./configure --prefix=/usr/local/sqlite3 make sudo make install
sudo 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.9.tgz tar xf openldap-2.6.9.tgz cd openldap-2.6.9 ./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_soelim
sudo 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.11.1.tar.xz tar xf curl-8.11.1.tar.xz cd curl-8.11.1 ./configure --prefix=/usr/local/curl --with-openssl make sudo make install
sudo 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.9/onig-6.9.9.tar.gz tar xf onig-6.9.9.tar.gz cd onig-6.9.9 ./configure --prefix=/usr/local/oniguruma make sudo make install
sudo 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 --prefix=/usr/local/jpeg make sudo make install
sudo ln -s /usr/local/jpeg/lib/pkgconfig/libjpeg.pc /usr/local/lib/pkgconfig/libjpeg.pc
-
libpngのコンパイルとインストール
curl -LO https://download.sourceforge.net/libpng/libpng-1.6.44.tar.xz tar xf libpng-1.6.44.tar.xz cd libpng-1.6.44 ./configure --prefix=/usr/local/libpng make sudo make install
sudo ln -s /usr/local/libpng/lib/pkgconfig/libpng.pc /usr/local/lib/pkgconfig/libpng.pc sudo ln -s /usr/local/libpng/lib/pkgconfig/libpng16.pc /usr/local/lib/pkgconfig/libpng16.pc
-
libzipのコンパイルとインストール
curl -LO https://libzip.org/download/libzip-1.11.2.tar.xz tar xf libzip-1.11.2.tar.xz cd libzip-1.11.2 mkdir build cd build cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/libzip make sudo make install
sudo 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.1.tar.xz tar xf php-8.4.1.tar.xz cd php-8.4.1 ./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-zip \ --with-zlib make
cd libs install_name_tool -change "@rpath/libzip.5.dylib" \ "/usr/local/libzip/lib/libzip.5.dylib" \ libphp.so cd ../ sudo apachectl stop sudo make install
sudo ln -s /usr/local/php/bin/php /usr/local/bin/php
PHPインストールの段階でapacheを止めておく。止めないでlibphp.soを入れ替えると、apachectlコマンドを実行した時に、apachectl: line 79: xxxxx Killed: 9や、httpd: Syntax error(Library not loaded:)というエラーが出る
-
php.iniのコピー、設定および設置
phpの初期設定ファイルphp.iniは、ダウンロードしたソースコードフォルダphp-8.3.13
直下に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.conf
diff -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.1/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.1 (cli) (built: Dec 20 2024 01:21:34) (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.conf
diff -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
この投稿へのコメント