Apache Module で呼び出すPHP のextension_dir の相対パス(relative path)
についてのメモ
※Windows もLinux も一緒であるか分からないです※
Windows でApache とPHP の入っているディレクトリごと
好きな場所に移動して、バッチファイルから実行したいので
迷った時のメモです。
PHP の
extension_dir のパス
Windows なら
C:\xxxx\xxxx
とか絶対パスで書く方法しかこれまで使ったことがなかったので
相対パスだとどうなるか、あれこれやっても動かないので困っていました。
もしかして・・・と思い、
Apache のbin から見た相対的なアドレスを書いてみました。
xxx\Apache\bin\
(httpd.exe のあるフォルダ)
と
xxx\php\ext\
(拡張のフォルダ)
があったとします。
そうすると、php.ini では、
extension_dir
は、php のext のフォルダを
..\..\php\ext
と書きます。
つまり
extension_dir = "..\..\php\ext"
と書く事になります。
一応、後から書いたメモなので、どうだったか定かですが、
Apche はModule版のPHP を使っています。
httpd.conf には、上記のパスの作りであると
PHPINIDir "..\..\php"
としています。
また、
Module 版だとApache のconfig (httpd.conf)で
php_admin_value が使えるので
php_admin_value extension_dir = "..\..\php\ext"
としてもいいですが、
実行時の設定でデフォルトの方の設定には反映されないです。
なんとも言い難いのでやっぱりPHPのphp.ini に書くべきだと思います。
そして気持ちの悪い作りの問題ですが、
これをすると、きっと間違いなく、
プロシージャエントリポイントxxx_xxx_xxxが
ダイナミックリンクライブラリxxx.dllから見つかりませんでした
と出てくると思います、これが出たらパスが通った証拠なのですが、
Apache から見て、PHP のモジュールが見えないと、
Apache のモジュール版のPHP は動いていることにならないみたいなのです。
ここで気持ちが悪いのですが、
Apache のbin つまり、apache.exe のあるフォルダに
PHP のphp.exe のあるフォルダにある、xxx.dllをコピーして入れます。
当方の場合、何度か聞かれましたが、
extension の読み込む量やら状況に応じて、
その聞かれる数は違うと思います。
聞かれる度にxxx.dllをコピーしたらエラーを聞かれず、
指定したextension を全て
phpinfo() から確認することが出来ました。
何とも厄介ですが、extension_dir の相対パス での指定は成功!した訳です。
うーん、微妙だけど、現在のApache とPHP ではこの設定しかないみたいです。
ちなみに、php のバージョンは7.2 で確認をしました(Windows 版です)。
お粗末なメモでした<_ _>
コメント一覧