2011-07-11 14 views
9

私は数年前からPHPでプログラミングしてきましたが、は決してにこのエラーが発生しました。Require_once PHPエラー

ここに私の widget.phpファイルです:

require_once('fruit.php'); 
echo "I am compiling just fine!!!"; 

そして、私のfruit.phpファイル:これらの2つのファイルがこのように見ると

$bVar = true; 

^その後、すべてがエラーなしでコンパイル私は "私はちょうど良いコンパイルです!!!"成功メッセージを取得します。今

、私はfruit.phpファイル1つのディレクトリレベル上に移動し、ディレクトリの再構築を反映するために、私の widget.phpファイルを変更分:

require_once('../fruit.php'); 
echo "I am compiling just fine!!!"; 

これで、すべての突然、私は決してPHPでの作業のすべての私の年では

Warning: require_once(../fruit.php) [function.require-once]: failed to open stream: No such file or directory in /webroot/app/widget.php on line 1 

Fatal error: require_once() [function.require]: Failed opening required '../fruit.php' (include_path='.:/usr/local/php5/lib/php') in /webroot/app/widget.php on line 1 

、私はをしました SE:PHPの警告&致命的なエラーを取得していませんen require_once()は前と同じように失敗します。何か案は?!?!

+5

私がすぐに考えることができる唯一のことは、あなたは親フォルダのWebサーバーユーザーのアクセス許可をチェックしましたか?オペレーティングシステム、Webサーバーなどを確認したい場合があります。この場合、関連性があることがわかります。 –

+0

+1 Jeffの場合...ウェブサーバー "user"は親ディレクトリにアクセスできますか? – sdolgy

+0

@Jeff Parker - 決して私の心を越えたことはありません。私はホストを呼び出して尋ねなければならないだろう。これはApacheかPHPの変数ですか?どのファイルと変数名ですか?ありがとう! – Kim

答えて

1

2番目のケースではパスを指定していますが、最初のケースではインクルードパスが使用されています。おそらく明示的に..を指定するのではなく、2番目のケースでは、インクルードパスを変更します。

http://php.net/manual/en/function.set-include-path.php

+0

提案に感謝し、今朝それを調べますが、require_onceの中で "./"または ".. /"を使用することで決して問題はありませんでした。 ()ステートメントを使用していましたが、これまでにset_include_path()関数を使用してこのような問題を修正する必要はありませんでした。再度、感謝します! – Kim

+0

IMHOは、インクルードパスを設定することは重要ではありません。@kimが行っているようにファイルを直接インクルードするときは、間違っていると私を修正してください。 – Kumar

+0

誰かがchdirなどをしたことがあるかもしれません。 –

-1
require_once('fruit.php'); 

これはwidget.phpは関係なく、現在の作業ディレクトリが何であるか、ではありませんと同じディレクトリにfruit.phpを検索します。

require_once('../fruit.php'); 

これは現在ディレクトリの上のディレクトリに、ではないですwidget.php 1上記のディレクトリにfruit.phpを検索します。

+0

いいえ、それは間違っています。 'fruit.php'は' include_path'を使ってパスを解決しようとします(現在の作業ディレクトリ '.'は通常それの一部です)。' ../ fruit.php'は現在の作業を使って_only_を解決しようとしますディレクトリ。 – KingCrunch

+0

追加: 'fruit.php'を呼んでも、現在の作業ディレクトリがディレクトリを指しているわけではありません。' fruit.php'は 'php some/directory/fruit.php'です。あるいは、 'chwd()'を使って変更されました。 – KingCrunch

13

たぶん、あなたは間違った作業ディレクトリにあります。とにかくそれに頼るのは悪い考えです(あなたが明白にそれにアクセスしたいということを除いて)。

require __DIR__ . '/../fruit.php'; 

または事前5.3

require dirname(__FILE__) . '/../fruit.php'; 

..、または.で始まるパスがないには、パスに対して、唯一の現在の作業ディレクトリに対して解決されることを、思い出させるを使用してください。

0

私は質問が古いことを知っていますが、それはまだ関連しています。

私の経験では、"open_basedir" directiveがこの問題を引き起こす可能性が最も高いです。

関連する問題