アプリケーション開発ポータルサイト
ServerNote.NET
カテゴリー【ApacheMacOS
HomeBrewでApache2を入れて自動起動つきで動かしPHPモジュールと連携する
POSTED BY
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のインフォメーションページが出れば大成功!

※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
【WEBMASTER/管理人】
自営業プログラマーです。お仕事ください!
ご連絡は以下アドレスまでお願いします★

【キーワード検索】