【macOS Monterey 12.6】apache+php利用者はアップデート待機推奨、暫定対策はこれしかないかも
脆弱性に対応( HT213444:macOS Monterey 12.6 のセキュリティコンテンツについて )したmacOS Monterey 12.6にアップデートしました。
- 【12.6】従来のApache/2.4.53から Apache/2.4.54 にバージョンアップしています。
brewでインストールしたphp+apacheのWebサーバーの組み合わせ、opcache.soが原因で動作しません。
Failed loading /opt/homebrew/opt/php/lib/php/20210902/opcache.so: dlopen(/opt/homebrew/opt/php/lib/php/20210902/opcache.so, 0x0009): tried: '/opt/homebrew/opt/php/lib/php/20210902/opcache.so' (code signature in <XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX> '/opt/homebrew/Cellar/php/8.1.10/lib/php/20210902/opcache.so' not valid for use in process: mapped file has no Team ID and is not a platform binary (signed with custom identity or adhoc?)), '/opt/homebrew/Cellar/php/8.1.10/lib/php/20210902/opcache.so' (code signature in <XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX> '/opt/homebrew/Cellar/php/8.1.10/lib/php/20210902/opcache.so' not valid for use in process: mapped file has no Team ID and is not a platform binary (signed with custom identity or adhoc?))
- opcache.soはプロセス利用できない
- Team IDがない、platform binaryではない(カスタム ID またはアドホックで署名?)
brew upgrade phpで最新版(8.1.10_1)になりました。状況変わりませんでした。
回避策、対応策が公開されるまでmacOS Monterey 12.6へのアップデートは待った方が良さそうです。
【暫定】apacheでphpを動作させる手順
Safari(ブラウザー)からphpへアクセスしても無応答のままです。opcacheを利用しない方法で暫定的に動作させることができます。
- homebrewの標準環境でのご利用を想定しています。
- /opt/homebrew/etc/php/8.1/conf.d/ext-opcache.ini
ここにopcache.soのフルパスが記載されています。行の先頭に;(セミコロン)を追加します。
; zend_extension=/opt/homebrew/opt/php/lib/php/20210902/opcache.so
- php.iniを見直します。
- zend_extension=opcacheが有効になっている場合、コメントアウト(行頭セミコロン)します。
- 保存したiniを再度適用させるためapache再起動します。
sudo apachectl stop; sudo apachectl start
php -vコマンドで無効にできたかを確認できます。
php -v
PHP 8.1.10 (cli) (built: Sep 3 2022 12:09:27) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.10, Copyright (c) Zend Technologies
with Zend OPcache v8.1.10, Copyright (c), by Zend Technologies
↓↓設定が正常ならZend OPCacheが消えているはずです。
PHP 8.1.10 (cli) (built: Sep 3 2022 12:09:27) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.10, Copyright (c) Zend Technologies
まとめ:opcacheの導入方法はたくさんあるが、disable・uninstall方法は見当たらない
phpでopcacheを有効にする方法やインストールする方法はたくさん見つけることができます。
今回はdlopenでopcacheをロードするタイミングでエラーが発生しています。この場合、どうしたらいいのか悩みます。disableやuninstall方法を探りましたが、php8の環境にマッチする情報を見つけることができませんでした。
今回の暫定方法は、php.iniのzend_extension=opcacheだけをコメントアウトしても、エラーのまま、このデフォルトで有効になっている状況を無効にしたいという思いから見つけることができました。
Team IDがない、platform binaryというエラーの指摘から推測すると、codesignで利用している自己証明書の作り方に原因がありそうです。
コメントシステムを利用したくない方は お問い合わせ からお願いします。
2013.8.19 DISQUS(外部コメントサービス)の利用を開始しました。
Facebook, google, Twitter等のアカウントで投稿可能です。