MAMP 6 から MAMP 7 へのアップデートでハマった
カテゴリー: その他
これまで MAMP 6.9 を使用していましたが、7月頃から PHP のバージョンが 7.4.33 の場合、WordPress のダッシュボードに「PHP の更新を推奨」という警告メッセージが表示されるようになりました。WordPress 6.8 の推奨の PHP バージョンが 8.3 以上になったためです。
MAMP 6.9 では PHP 8.2 までしか選べない(8.1 以上に設定するとダッシュボードには警告は出ないが、サイトヘルスには「おすすめの改善」として表示される)ので、最新の MAMP 7.2 にアップデートすることにしました。
実は、MAMP 7 は1年以上前にリリースされていて一度アップデートを試みたことがあるのですが、Apache が起動できず、MAMP が使えないと業務に差し支えるので元に戻したのでした。
今回少し余裕ができたので、一つ一つ手順を追ってアップデートしましたが、MAMP 7 はいろいろと初期設定が変わってるようで、MAMP 6 系のアップデート(MAMP のアップデートと再設定(Dropbox 共有、バーチャルホスト、etc.)のようにすんなりとはいきませんでした。
MySQL のバージョン
MAMP 6.9 では MySQL のバージョンは 5.7 でしたが、MAMP 7 では MySQL 8.0 が追加となり、これがデフォルトとなっているので、データベースが消えたように見えてびっくりします。設定から Use MySQL server: で 5.7.xx を選択して Apache を再起動すればデータベースが復活します。
なお、WordPress 6.8 の推奨の MySQL のバージョンは 8.0 以上なので、いずれこれも移行する必要があります。
mod_rewrite
MAMP 7 にアップデートしたら WordPress サイトの下層ページが 404 エラーとなりました。WordPress ではパーマリンク設定で mod_rewrite を利用しているため、Apache で mod_rewrite モジュールが利用できないと下層ページが 404 エラーとなるとのこと。
確かに、WordPress サイトの .htaccesss には <IfModule mod_rewrite.c> という記述があります。mod_rewrite が利用できなければリライトができないわけですね。
MAMP 7 では mod_rewrite がデフォルトで無効になっているので、有効にする必要があります。
/Applications/MAMP/conf/apache/httpd.conf で下記の記述の先頭のコメントアウトを外して MAMP を再起動すると 404 エラーが解消しました。
LoadModule rewrite_module modules/mod_rewrite.so
SSL
前回のアップデートの記事には書いてないのですが、MAMP で SSL を利用できるようにしていました。SSL を利用できるようにするには、Homebrew で OpenSSL をインストールし、秘密鍵〜SSL証明書の作成等、手順が多いのでここでは割愛しますが、SSL でもバーチャルホストを利用するため、 /Applications/MAMP/conf/apache/httpd.conf で Secure (SSL/TLS) connections の設定の先頭のコメントアウトを外します。
# Secure (SSL/TLS) connections
Include /Applications/MAMP/conf/apache/extra/httpd-ssl.conf
しかし、MAMP を再起動すると Apache が起動せず、「Apache couldn’t be started. Please check your MAMP installation and configuration.」というエラーが表示されました。検索してみると mod_socache_shmcb モジュールが読み込まれていないためのようで、これも先の mod_rewrite と同様、下記の記述の先頭のコメントアウトを外して MAMP を再起動したら無事 Apache が起動し、https://〜 でのアクセスもできました。
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
SSI
さらに、最近 SSI を使ったサイトのメンテナンス業務があるので、MAMP で SSI も利用できるようにしています。案の定これも動作せず、以下の2つのモジュールを有効にして解決しました。
LoadModule include_module modules/mod_include.so
LoadModule deflate_module modules/mod_deflate.so
php_value
これで全て解決と思ったら、いくつかのバーチャルホストのサイトが 500 エラーとなります。ChatGPT に聞いてみると、
MAMP 7 の Apache では、.htaccess 内の php_value / php_flag ディレクティブが使えなくなったためです。
(PHP がモジュール版ではなく FPM 経由で動作するようになり、.htaccess で PHP 設定を上書きできなくなっています)
とのこと。500 エラーとなったサイトはメディアの最大アップロードサイズを変更するため、.htaccess に以下のような php_value を書いていました。
php_value memory_limit 128M
php_value post_max_size 64M
php_value upload_max_filesize 32M
エラーを解消するため、サイトルートに「.user.ini」というファイルを作成して .htaccess の記述を移行しました。
memory_limit = 128M
post_max_size = 64M
upload_max_filesize = 32M
これでとりあえず全てのエラーが解消できましたが、MAMP 7 では上記以外にも多くのモジュールがデフォルトで無効になっているようなので、今後作業していく上で新たな問題が発見されるかもしれません。その際はまた対策方法がわかったら追記していこうと思います。
FastCGI (9月12日追記)
各ローカルサイトを確認していたら、静的な .html で php インクルードしてるページを開こうとすると、ダウンロードしようとすることが判明しました。聞き方が悪いのか ChatGPT に聞いても頓珍漢な回答しか得られず(MAMP の存在しないファイルを指定してきたり、挙げ句の果ては MAMP が壊れてると言ってきた -_-; )、素直にググったらすんなりと判明。
.html を PHP とし動かす場合、これまでは .htaccess に以下のように書いてました。
AddType application/x-httpd-php .html
MAMP 7 では PHP がこれまでの mod_php から php-fpm(FastCGI)に変わったためで、application/x-httpd-php ではなく、php-fastcgi ハンドラを指定する必要があるとのこと。以下の記述に変更して無事動作しました。
AddHandler php-fastcgi .html