人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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';

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


●質問者: cochoo
●カテゴリ:ウェブ制作
✍キーワード:Apache HTML ON open Pear
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● Numeric
●23ポイント

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

◎質問者からの返答

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

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

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

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


2 ● horonict
●23ポイント

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

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

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

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

◎質問者からの返答

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

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

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

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

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


3 ● b-wind
●34ポイント ベストアンサー
include_path = ".:/var/www/html/PEAR;/var/www/libs"

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

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

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


allow_url_fopen = On

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

PHP: 実行時設定 - Manual

◎質問者からの返答

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

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

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ