Windows上で動かしているPHPでextension=curlの行をコメントアウト(curlは例)したとき。

PHP Warning:  PHP Startup: Unable to load dynamic library 'curl' (tried: C:\php\ext\curl (謖・ョ壹&繧後◆繝「繧
ク繝・繝シ繝ォ縺瑚ヲ九▽縺九j縺セ縺帙s縲・, C:\php\ext\php_curl.dll (謖・ョ壹&繧後◆繝「繧ク繝・繝シ繝ォ縺瑚ヲ九▽縺九j
縺セ縺帙s縲・) in Unknown on line 0

が出たときには

  • extension_dir=ext/をコメントアウトしているか
  • phpのルートフォルダにパスが通っているか

を確認すればよい。なぜかエラーメッセージは文字化けしてしまう。何が書かれているんだろうか。

extension_dirを指定

エラーメッセージを読んだらわかる通りC:\php\ext\php_curl.dllはドライブのルートにphpフォルダを配置していることになってしまっている。これはextension_dirを指定していないことが原因なのでphp.iniを開いてextension_dirを検索、

;extension_dir=ext/

という行が見つかるので

extension_dir=ext/

とコメントアウトを外せば相対パスで探してくれるのでOK。

pathを指定

もしphpを次のように直接起動しているとするとpathがそのフォルダに通っていない可能性がある(これは例)。

C:\Users\USER\php\php.exe

このフォルダにあるlib???.dllはモジュール読み込み時に必要になる場合があるので次のようにしてpathを通しておく。

set PATH=C:\Users\USER\php;%PATH%

dllそのものをコピーするのは正しいマナーではないのでこうするのが正しい。GUIから設定すると永続化してしまうのでターミナル起動時の初期化スクリプトがあるならそこに追記しておけばいい。

まとめ

zipからphpプログラム一式をダウンロードしてきている場合に、新しいバージョンのphpでフォルダまるごと上書きした場合などはphp.iniの設定を最初からやり直すことになる。頻繁にやる作業ではないので暗黙のうちにextension_dirはもとからコメントアウトされていると思ってしまう。

pathを設定するほどでもないと直接フルパスを叩いていると別ディレクトリから叩いたときにdllにpathが通っておらずコケる。必ずpathを通して使う。