PHP で Apache からだと include ができるのに CIL からだとできない場合の解決策

ブラウザからアクセスすると普通に動くのに、コマンドラインから PHP を直接叩くと include が上手くできない。
@endo55 @kiyotchi さんからのアドバイスによると、open_basedir か PHP のセーフモード ON, OFF に問題があるとのこと。

ちなみに PHP を叩いたときは以下のエラーが出る。

php /home/.sites/1000/5555/web/path/to/mail.php
PHP Warning: include(): open_basedir restriction in effect. File(/home/.sites/1000/5555/web/path/to/config.php) is not within the allowed path(s): (/tmp/:/var/lib/php/session/) in /home/.sites/1000/5555/web/path/to/mail.php on line 2
PHP Warning: include(/home/.sites/1000/5555/web/path/to/config.php): failed to open stream: Operation not permitted in /home/.sites/1000/5555/web/path/to/mail.php on line 2
PHP Warning: include(): Failed opening ‘/home/.sites/1000/5555/web/path/to/config.php’ for inclusion (include_path=’.:/usr/share/pear:/usr/share/php’) in /home/.sites/1000/5555/web/path/to/mail.php on line 2

PHP ファイルの中身は以下のようになっています。

ちなみに include するだけの PHP ファイルの内容は以下。

1
2
<?php
include('/home/.sites/1000/5555/web/path/to/config.php');

ちなみに現在の open_baseurl の設定は以下。
これが各サイト毎に設定されているもので、この変な番号は、今回のサイト専用のディレクトリ。

php_admin_value open_basedir /tmp/:/var/lib/php/session/:/home/.sites/1000/5555/

以下は php.ini の設定内容です。

open_basedir = /tmp/:/var/lib/php/session/

ここで、注目したいのが、各サイト用に設定されているものは、Apache 経由でアクセスされたときしか読み込まれず、CIL から実行すると php.ini だけが読み込まれるため、サイト用のディレクトリに存在するファイルを読み込むことができていないという点です。

そのため、php.ini の open_basedir をコメントアウトすることで解決することができます。
この点に関しては @kiyotchi @tfmagician さんによってアドバイスいただきました。

最後に @tfmagician さんから以下のようなアドバイスを頂きました。

良かった良かったw サーバ設定は私もかなり悩んだので…最後におせっかいですが、サーバ設定に悩んだときは”ログの場所を把握して、ログをしっかり見ること、ログを検索にかけること”、これだけわかってればだいたい解決します^^

コメント

コメントは受け付けていません。