9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Mac標準のApacheにhomebrewでインストールしたPHPモジュールを指定するとエラーになる問題の解決方法

Posted at

homebrewでインストールしたPHPのApacheモジュールをMac標準のApacheで使用するために以下のように記述したとします。

LoadModule php7_module /usr/local/opt/php@7.1/lib/httpd/modules/libphp7.so

そして再起動すると以下のエラーが発生して失敗します。

httpd: Syntax error on line 179 of /private/etc/apache2/httpd.conf: Cannot load /usr/local/opt/php@7.1/lib/httpd/modules/libphp7.so into server: dlopen(/usr/local/opt/php@7.1/lib/httpd/modules/libphp7.so, 10): no suitable image found. Did find:\n\t/usr/local/opt/php@7.1/lib/httpd/modules/libphp7.so: code signature in (/usr/local/opt/php@7.1/lib/httpd/modules/libphp7.so) not valid for use in process using Library Validation: mapped file has no cdhash, completely unsigned? Code has to be at least ad-hoc signed.\n\t/usr/local/opt/php@7.1/lib/httpd/modules/libphp7.so: stat() failed with errno=22

エラーメッセージが長いですが、要は libphp7.so のロードに失敗していて、その理由は署名されていないからということです。codesign コマンドで確認すると確かに署名されていません。

homebrewでインストールしたlibphp7.soの署名
$ codesign -vd /usr/local/opt/php@7.1/lib/httpd/modules/libphp7.so
/usr/local/opt/php@7.1/lib/httpd/modules/libphp7.so: code object is not signed at all

なぜエラーになるかというと、以下のように /usr/sbin/httpd が署名されるようになり、それによってロードされる .so も署名されている必要が出てきたということのようです。署名していない .so がロードできたら署名しているコードと全く関係ないコードが実行し放題になってしまうので、そういうことはできないということなのでしょう。おそらくHigh Sierra以降で署名されるようになったようです。

標準でインストールされているApacheの署名
$ codesign -vd /usr/sbin/httpd
Executable=/usr/sbin/httpd
Identifier=com.apple.apache.httpd
Format=Mach-O thin (x86_64)
CodeDirectory v=20100 size=6599 flags=0x0(none) hashes=202+2 location=embedded
Platform identifier=5
Signature size=4485
Info.plist entries=6
TeamIdentifier=not set
Sealed Resources=none
Internal requirements count=1 size=72

ということで標準のApacheではhomebrewでインストールしたPHPモジュールは使用できません。解決方法としては署名されていないApacheをインストールしてそちらを使うということになります。幸いhomebrewでApacheもインストールできるので、以下のようにしてhomebrewのApacheを使用できるようにすることができます。

# homebrewでApacheをインストールする
brew install httpd
# 標準でインストールされているApacheを停止する
sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist
# homebrewの方のApacheを起動する
brew services restart httpd
9
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?