My開発メモ

MAMPを削除して、macにプリインストールされているApacheを使う。PHPも8.2を入れる

今まではMAMPを使っていたが、それでは勉強にならないので、MacにプリインストールされているApacheを使うことにした。
ついでに、PHPも8.2をインストールする。

MAMPのアンインストール

MAMPのアンインストールは、アプリケーションフォルダのMAMPのアイコンをゴミ箱に入れるだけ。

PHPのインストール

次にPHPをインストールした。

$ brew update
$ brew install php

最後に以下のようにメッセージが出力された。

To enable PHP in Apache add the following to httpd.conf and restart Apache:
    LoadModule php_module /opt/homebrew/opt/php/lib/httpd/modules/libphp.so

    <FilesMatch \.php$>
        SetHandler application/x-httpd-php
    </FilesMatch>

Finally, check DirectoryIndex includes index.php
    DirectoryIndex index.php index.html

The php.ini and php-fpm.ini file can be found in:
    /opt/homebrew/etc/php/8.2/

To start php now and restart at login:
  brew services start php
Or, if you don't want/need a background service you can just run:
  /opt/homebrew/opt/php/sbin/php-fpm --nodaemonize

このメッセージのとおりにする。

httpd.confの修正
$ cd /etc/apache2
$ sudo cp httpd.conf httpd.conf_org
$ sudo vi httpd.conf

この行を追加。

LoadModule php_module /opt/homebrew/opt/php/lib/httpd/modules/libphp.so

この行を追加。

SetHandler application/x-httpd-php

具体的には、以下のように記述した。

<FilesMatch "\.php$">
    SetHandler application/x-httpd-php
</FilesMatch>

以下のように修正。

DirectoryIndex index.php index.html

具体的には、以下のように修正した。

<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>
php.ini の修正
$ sudo vi /opt/homebrew/etc/php/8.2/php.ini
memory_limit = 1024M
post_max_size = 512M
upload_max_filesize = 512M
date.timezone = Asia/Tokyo
php をサービスに登録
$ brew services start php
==> Successfully started 'php' (label: homebrew.mxcl.php)

すると、macが以下のようなメッセージを出した。

バックグラウンド項目が追加されました。
"php-fpm"はバックグラウンドで実行できる項目です。
これは"ログイン項目"設定で管理できます。

ここで php -v とすると、以下のようなエラーが出た。

dyld[10741]: Library not loaded: /opt/homebrew/opt/libavif/lib/libavif.15.dylib
Referenced from: <87C1A268-34E4-396F-8BBC-D5591064E333> /opt/homebrew/Cellar/gd/2.3.3_5/lib/libgd.3.dylib

以下のサイトを参考にした。
How to install PHP 8.3 on MacOS

次のように書かれていた。

To fix this issue, you need to install or reinstall GD
$ brew install gd
# or if you have already gd installed, run
$ brew reinstall gd

ということなので、以下を実行。

$ brew install gd

そののち、以下を実行。うまくいった。

$php -v
PHP 8.2.10 (cli) (built: Aug 31 2023 18:52:55) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.10, Copyright (c) Zend Technologies

コード署名を実行

この状態で次を実行すると、以下のようなエラーメッセージが出た。

% apachectl configtest
[Mon Sep 18 17:25:15.781306 2023] [so:error] [pid 11627] AH06665: No code signing authority for module at /opt/homebrew/opt/php/lib/httpd/modules/libphp.so specified in LoadModule directive.
httpd: Syntax error on line 189 of /private/etc/apache2/httpd.conf: Code signing absent - not loading module at: /opt/homebrew/opt/php/lib/httpd/modules/libphp.so

Code signing absent とは “コード署名がありません” ということ。

キーチェーンアクセスを起動する。
すでに認証局を作成していたが、期限切れなので、削除。
そののち、”認証局を作成”を実行。

名称: Seiichi_Nukayama_CA
ユーザ証明書: “コード署名” を選択。
“作成”をクリック。

証明書ができので、以下のコマンドを実行。

% codesign --sign "Seiichi_Nukayama_CA" --force --keychain \
~/Library/Keychains/login.keychain-db \
/opt/homebrew/opt/php/lib/httpd/modules/libphp.so
"codesignがキーチェーンに含まれるキー'Seiichi_Nukayama_CA' を
使用して署名しようとしています"

という表示が出て、パスワードを求められるので、入力。

httpd.confを修正

そして、httpd.confを修正する。

$ sudo vi /etc/apache2/httpd.conf
LoadModule php_module /opt/homebrew/opt/php/lib/httpd/modules/libphp.so "Seiichi_Nukayama_CA"
$ apachectl configtest
Syntax OK

OKとなったので、いよいよapacheを再起動する。

$ sudo apachectl restart

http://localhost/ とアクセスが成功した。

カテゴリー: Apache, MacOS, memo, php

タグ: libphp.so, libphp.soに署名する, キーチェーン, コード署名, 自己証明書

カウント: 193