PHPのinclude_pathで初心的な質問があります。


自作ヘッダ('header.php')をセキュリティの関係上、Webブラウザからアクセスできないディレクトリ('/var/www/libs')で管理したいのですが、次の実行処理で自作ヘッダの読み込み失敗エラーが発生します。

●php.ini設定(Apache再起動とphpinfoで設定反映を確認済み)
include_path = ".:/var/www/html/PEAR;/var/www/libs"
allow_url_fopen = On

●実行プログラム(test.php)
require_once 'header.php';
<以下略>

●実行結果
PHP Warning: require_once(header.php): failed to open stream: No such file or directory in /var/www/html/test.php on line 2
PHP Fatal error: require_once(): Failed opening required 'header.php' (include_path='.:/var/www/html/PEAR;/var/www/libs') in /var/www/html/test.php on line 2

サーバ側で参照権限が制限されている可能性を考え、Webブラウザで閲覧できるディレクトリ配下にheader.phpを持ってきて、php.iniのinclude_pathもそのように変更したのですが、同様のエラーが発生しました。

なお、実行ファイルを次のように絶対パスで指定すると、エラーは発生せず正常に動作します。

●実行プログラム(正常動作)
require_once '/var/www/libs/header.php';

どのような問題が考えられるか、ご教授のほどよろしくお願いいたします。

回答の条件
  • URL必須
  • 1人3回まで
  • 登録:2009/11/09 15:33:22
  • 終了:2009/11/09 16:10:04

ベストアンサー

id:b-wind No.3

b-wind回答回数3344ベストアンサー獲得回数4402009/11/09 15:57:06

ポイント34pt
include_path = ".:/var/www/html/PEAR;/var/www/libs"

PHP: コア php.ini ディレクティブに関する説明 - Manual

セパレーターが混在してる。

UNIXでは コロンで、Windowsではセミコロンで区切ったディレクトリのリスト で指定します。


allow_url_fopen = On

これは必要ない。セキュリティ上問題が多いので Off にすべき。

PHP: 実行時設定 - Manual

id:cochoo

ご回答いただきありがとうございました。

先のとおり勘違いしておりました^^

ちなみに、b-wind様がおっしゃるようにallow_url_fopenはOFFが適切だと思いますので、そのように変更したで後も正常動作を確認することができました。

問題が解決しましたので、これで質問をcloseさせていただきます。

みなさま、ありがとうございました!!

2009/11/09 16:09:37

その他の回答(2件)

id:Numeric No.1

Numeric回答回数83ベストアンサー獲得回数182009/11/09 15:47:53

ポイント23pt

include_path = ".:/var/www/html/PEAR;/var/www/libs"


パスのセパレータは";"(セミコロン)ではなく、":"(コロン)ではないでしょうか。

サーバによって違いますが、混在しているのがまずいのでは…

以下のように変更すれば直るかもしれません。

include_path = ".:/var/www/html/PEAR:/var/www/libs"

http://php.activeventure.com/ini.sect.path-directory.html

id:cochoo

ご回答いただきありがとうございました。

とんでもない勘違いをしていました。

コロンにして正常動作を確認しました。

ありがとうございました!!

2009/11/09 16:05:11
id:horonict No.2

horonict回答回数257ベストアンサー獲得回数512009/11/09 15:51:52

ポイント23pt

Linuxをご利用だと思いますが、include_pathのパスの区切り文字が間違っています。

セミコロンではなく、コロンを使ってください。

include_path = ".:/var/www/html/PEAR:/var/www/libs"

http://oshiete1.goo.ne.jp/qa3517118.html

id:cochoo

ご回答いただきありがとうございました。

おっしゃるとおり、UNIXを利用しております。

書いてはいませんでしたが、ローカルのテスト環境はWindowsでしたので、思いっきり勘違いしておりました。

コロンにしてちゃんと正常動作することを確認しました。

ありがとうございました!!

2009/11/09 16:06:48
id:b-wind No.3

b-wind回答回数3344ベストアンサー獲得回数4402009/11/09 15:57:06ここでベストアンサー

ポイント34pt
include_path = ".:/var/www/html/PEAR;/var/www/libs"

PHP: コア php.ini ディレクティブに関する説明 - Manual

セパレーターが混在してる。

UNIXでは コロンで、Windowsではセミコロンで区切ったディレクトリのリスト で指定します。


allow_url_fopen = On

これは必要ない。セキュリティ上問題が多いので Off にすべき。

PHP: 実行時設定 - Manual

id:cochoo

ご回答いただきありがとうございました。

先のとおり勘違いしておりました^^

ちなみに、b-wind様がおっしゃるようにallow_url_fopenはOFFが適切だと思いますので、そのように変更したで後も正常動作を確認することができました。

問題が解決しましたので、これで質問をcloseさせていただきます。

みなさま、ありがとうございました!!

2009/11/09 16:09:37

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません