2024-05-19
macOSに標準で入っているApacheは、後入れの外部モジュールを組み込むことができないという致命的な欠陥がある。たとえばmod_php.soを組み込もうとしても、
[Sun May 19 19:17:40.127443 2024] [so:error] [pid 10778] AH06665: No code signing authority for module at /usr/local/opt/php/lib/httpd/modules/libphp.so specified in LoadModule directive. httpd: Syntax error on line 190 of /private/etc/apache2/httpd.conf: Code signing absent - not loading module at: /usr/local/opt/php/lib/httpd/modules/libphp.so
と言われてエラー終了してしまう。
結局のところは、HomeBrewで入れたものはHomeBrewで入れたものしか連携させられないと見て良いだろう。
よって、PHPも、Apacheも、HomeBrewからインストールしたもの同士であれば連携できる。
HomeBrewでApache2を入れる
まずシステム標準のApacheを止める
sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist
インストール
brew search apache2 brew install apache2
/usr/local/opt/apache2
/usr/local/etc/httpd
/usr/local/var/log/httpd
に一式が入ったようである。
起動
/usr/local/etc/httpd/httpd.confではListenが8080になっている。
/usr/local/opt/apache2/bin/apachectl configtest Syntax OK /usr/local/opt/apache2/bin/apachectl start cat /usr/local/var/log/httpd/error_log [Sun May 19 19:54:17.489816 2024] [mpm_prefork:notice] [pid 12129] AH00163: Apache/2.4.59 (Unix) configured -- resuming normal operations [Sun May 19 19:54:17.490998 2024] [core:notice] [pid 12129] AH00094: Command line: '/usr/local/opt/httpd/bin/httpd'
ブラウザからhttp://127.0.0.1:8080/と叩いてIt Works!と出ていれば成功。
自動起動設定
brew services start httpd brew services list Name Status User File httpd started hogeuser ~/Library/LaunchAgents/homebrew.mxcl.httpd.plist
自動起動をやめるには
brew services stop httpd
HomeBrewでPHPを入れる
brew install php php --version PHP 8.3.7 (cli) (built: May 7 2024 16:35:26) (NTS) Copyright (c) The PHP Group Zend Engine v4.3.7, Copyright (c) Zend Technologies with Zend OPcache v8.3.7, Copyright (c), by Zend Technologies
httpd.confを修正しPHPモジュール読み込み+自分用設定
バックアップを取ったうえで、修正する。
cd /usr/local/etc/httpd cp -p httpd.conf httpd.conf.default vi httpd.conf
変更点は以下のようにした。インストールしたApache用PHPモジュールを組み込み、拡張子.phpではそれが発動、さらにユーザー・グループは自分に変更、ログやドキュメントルートも自分ホームのwwwフォルダ以下に変更している。
LoadModule php_module /usr/local/opt/php/lib/httpd/modules/libphp.so <ifmodule php_module> AddType application/x-httpd-php .php PHPIniDir /usr/local/etc/php/8.3 </ifmodule> User hogeuser Group admin DocumentRoot "/Users/hogeuser/www/objs" <directory> Options FollowSymLinks DirectoryIndex index.html index.php ErrorLog "/Users/hogeuser/www/logs/error_log" CustomLog "/Users/hogeuser/www/logs/access_log" common #使用しないのでコメントアウト #ScriptAlias /cgi-bin/ "/usr/local/var/www/cgi-bin/" #<directory> # AllowOverride None # Options None # Require all granted #</directory> </directory>
ディレクトリの作成、コンフィグチェック、Apacheの再ロード
cd mkdir www cd www mkdir objs logs sess /usr/local/opt/apache2/bin/apachectl configtest Syntax OK brew services stop httpd brew services start httpd
自分ホームにログが生成されているか確認
cd cd www/logs cat error_log [Sun May 19 21:17:50.761095 2024] [mpm_prefork:notice] [pid 14910] AH00163: Apache/2.4.59 (Unix) PHP/8.3.7 configured -- resuming normal operations [Sun May 19 21:17:50.761772 2024] [core:notice] [pid 14910] AH00094: Command line: '/usr/local/opt/httpd/bin/httpd -D FOREGROUND'
phpinfo.phpを作成しブラウザで表示確認
www/objs/phpinfo.phpを以下のように作成
<?php phpinfo(); ?>
ブラウザからhttp://127.0.0.1:8080/phpinfo.phpと叩いてPHPのインフォメーションページが出れば大成功!
※本記事内容の無断転載を禁じます。
ご連絡は以下アドレスまでお願いします★
さくらインターネットでPython MecabをCGIから使う
さくらインターネットのPHPでAnalytics-G4 APIを使う
インクルードパスの調べ方
【Git】特定ファイルを除外する.gitignore
【Ubuntu/Debian】NVIDIA関係のドライバを自動アップデートさせない
【Python】Spacyを使用して文章から出発地と目的地を抜き出す
HomeBrewでApache2を入れて自動起動つきで動かしPHPモジュールと連携する
macOSに標準付属のApacheを自動起動つきで動かす
HomeBrewでPostgreSQLを入れて自動起動つきで動かす
Windows版Google Driveが使用中と言われアンインストールできない場合
【C/C++】小数点以下の切り捨て・切り上げ・四捨五入
進研ゼミチャレンジタッチをAndroid端末化する
Windows11+WSL2でUbuntuを使う【2】ブリッジ接続+固定IPの設定
Googleスプレッドシートで図形をコピーして使いまわすには
【Linux】iconv/libiconvをソースコードからインストール
【Apache】サーバーに同時接続可能なクライアント数を調整する
Pythonで処理にかかった時間を計測するには
Windows11のコマンドプロンプトでテキストをコピーする