macOS Mojave で apache2.4 + php7.2 環境構築
macOS の Mojave が出て暫く経過したが、巷で大きな混乱もなかったので、ダークモードを体験したくて、ワクワクテカテカ(死語)しながらアップグレードを行った。(一応、バックアップは取ったし、ドンと来い。)
アップグレード後は apache2 の設定が言わずもがなながらデフォルトに戻ってしまったので、前々回記事および前回記事の手順で php7.2 を Homebrew で再インストールし、周辺の環境を再セットアップした。だが、同じ様に設定しても、ブラウザからページを開くと、'ERR_CONNECTION_REFUSED' が出てローカルのページが立ち上がらない。
apache の起動に失敗しているようなので、'sudo apachectl -k start' コマンドで状態を探ることに。
% sudo apachectl -k start httpd: Syntax error on line 177 of /private/etc/apache2/httpd.conf: Cannot load /usr/local/Cellar/php/7.2.10/lib/httpd/modules/libphp7.so into server: dlopen(/usr/local/Cellar/php/7.2.10/lib/httpd/modules/libphp7.so, 10): no suitable image found. Did find:\n\t/usr/local/Cellar/php/7.2.10/lib/httpd/modules/libphp7.so: code signature in (/usr/local/Cellar/php/7.2.10/lib/httpd/modules/libphp7.so) not valid for use in process using Library Validation: mapped file has no cdhash, completely unsigned? Code has to be at least ad-hoc signed.\n\t/usr/local/Cellar/php/7.2.10/lib/httpd/modules/libphp7.so: stat() failed with errno=22
どうやら、Homebrew でインストールしたphp7.2 のモジュールが Mojave 標準のapache に適していないためエラーになっているようだ。
色々ネットで情報を探っていたら、Github の Homebrew ページ内に本問題がトピックス 'PHP7.2 module fails to load in macOS Mojave (14.2) #32436' としてあがっていた。
上記リンク先のページにて、pratiksahu氏より本問題の解決方法として、Mojave 標準のApache を止めて、代わりに Homebrew のapache をインストールして起動する手順が紹介されていたので、早速実践してみることに。
まずは、Mojave 標準の apache を止めた後、Homebrew のapache インストールから。
% sudo apachectl stop % brew install httpd
無事、インストール後は、Mojave 標準 apache の自動起動を止めるコマンド実行。
% sudo launchctl unload /System/Library/LaunchDaemons/org.apache.httpd.plist
Homebrew の apache 設定ファイル (/usr/local/etc/httpd/httpd.conf) を設定
... LoadModule php7_module /usr/local/lib/httpd/modules/libphp7.so // php7.2 を有効化。(Homebrew の案内に従い、モジュールの実体がある場所ではなく、シンボリックリンクが張られている場所のパスを追記。) ... Listen 80 // Homebrew 版 apache のデフォルト値は'8080'。一般的なポートで良い場合は変更。 ... DirectoryIndex index.html index.php // index.php を追記。 ...
ひととおり設定して、'sudo apachectl start' でapache を起動するも、何故か拡張子.php のファイル上で PHP が実行されず、phpのソースコードがそのまま WEB 上に表示されるだけ。色々と試行錯誤した結果、PHP公式ページやこのページなどを参考にしながら、拡張子.php のファイル上で確実にPHPが実行されるように、次の内容を /usr/local/etc/httpd/httpd.conf の最後に追記。すると、突然正常に実行されるようになった。
<FilesMatch \.php$> SetHandler application/x-httpd-php </FilesMatch>
最後に、次回起動から Homebrew 版 apache を自動起動するためのコマンド実行。
% brew services restart httpd Stopping `httpd`... (might take a while) ==> Successfully stopped `httpd` (label: homebrew.mxcl.httpd) ==> Successfully started `httpd` (label: homebrew.mxcl.httpd)
apache を再起動後、phpinfo(); 実行ファイルを開き、無事 Mojave 上で php7.2 が動作していることを確認。
なお、Mojave 標準の apache から Homebrew 版の環境を移した結果、環境設定のためのファイル群が別の場所に移動したため、今後細かい設定を実行していく前に状態を整理。
maxOSX標準版 apache | Homebrew 版 apache | |
---|---|---|
ドキュメントルート | /Library/WebServer/Documents | /usr/local/var/www |
httpd.conf | /etc/apache2/httpd.conf | /usr/local/etc/httpd/httpd.conf |
apachectl | /usr/sbin/apachectl | /usr/local/bin/apachectl(シンボリックリンク) |
httpd-vhosts.conf | /etc/apache2/extra/httpd-vhosts.conf | /usr/local/etc/httpd/extra/httpd-vhosts.conf |
前回 HighSierra で実施したバーチャルホストの設定等、基本的に編集する内容は同じだが、編集対象のファイルが場所とともに変わるので、混乱しないようにしたい。