2009-07-20 15 views
0

私はMVCに新しいと私は多くの私のコードをやり直しています。テンプレートを使用したrequire_onceの問題

<?php require_once("header.php"); ?> 

両方master.phpheader.phpはまだ同じフォルダ内にある、私は次のエラーを取得する:

Warning: require_once(1) [function.require-once]: failed to open stream: No such file or directory in /Users/MyName/Sites/MySite/Views/master.php on line 15

Fatal error: require_once() [function.require]: Failed opening required '1' (include_path='.:') in /Users/MyName/Sites/MySite/Views/master.php on line 15

これは前に実現しなかった

は私が持っている master.php(インデックス)を持っています。 (ファイルはすべてルートフォルダにあります)。彼らは同じフォルダにあるので、私は問題が何であるかはわかりません - 私は '../'に戻るか、他のフォルダを参照する必要はありません。私はここで何が欠けていますか?

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

+1

そうでないエラーからそれが "1"を要求しようとしているように見える "header.php"を要求しようとしているように見えます。あなたが実際に表示するラインは15行目ですか?コードを投稿すると助けになるかもしれません。 – Cfreak

+0

はい、それは15行目の正確なコードです:<?php require_once( "header.php")またはdie; ?> – asdfasdfasdfasdf

答えて

5

をあなたのコードがあると言う:

<?php require_once("header.php") or die; ?> 

「アウト残してみてくださいPHPは、インクルードは、あなたが持っている必要があり致命的である必要は見つかりませんでしたまたはdie " - > istは必要ありません。ファイルが見つからない場合、require_onceは致命的なエラーを引き起こすためです。

編集: 私はそれをテストしましたが、 "または死ぬ"を除いて動作します。

編集2:なぜこれが起こっ説明: 上記のコードは、次のように書くことができます。

require_once (("header.php") or die()); 

ますrequire_once関数ではなく、PHPの声明ので、中括弧はオプションですが、PHPの解釈上記はブール式で、文字列 "header.php"はブール値 "true"に評価されます。 Trueは文字列にキャストされ(結果は "1"になります)、この文字列はrequireを1回だけ返されます。したがって、上記のコードはここ

require_once("1") 

として解釈されます

は、それがステップによって解釈ステップを取得する方法である:

(("header.php") or die()) = (TRUE or die()) 
(TRUE or die()) = TRUE 
(string) TRUE = '1'; 

は、このことができます願ってい;)

+0

ダイがなければ、ページはロードされますが、ヘッダーとフッターは存在しません。 – asdfasdfasdfasdf

+0

ヘッダーとフッターに実際にコンテンツを表示していますか?ページにphp-warningsが表示されますか? – smoove

+0

私はheader.phpとfooter.phpの両方を直接見てきましたが、両方ともコンテンツをうまく表示しています。 – asdfasdfasdfasdf

1

PHPはあなたのルートフォルダ内で 'header.php'を探し始めるので、それを見つけることができません。それは現在のスクリプトと同じディレクトリにある場合は、むしろ魔法の定数__DIR__を使用する必要があります。

<?php require_once __DIR__ . '/header.php'; ?> 
+0

header.phpとmaster.phpは両方とも同じディレクトリにあり、インクルードパスには '。'が含まれています。それは必須ではありません。 – MitMaro

+0

現在のディレクトリ(include_path =。)は、ディレクトリではなくスクリプトが呼び出されたパスです。スクリプトは存在します。 – soulmerge

+0

同じエラーが発生します。 – asdfasdfasdfasdf

1

master.phpが含まれるか同じディレクトリにない別のスクリプトファイルによって必要とされているので、それがかもしれheader.phpとします。つまり、インデックスにアクセスすると、どのファイルが呼び出され/解析されているのか知っていますか?

require()に適用される、include()ためdocumentationを見てみましょう:

Files for including are first looked for in each include_path entry relative to the current working directory, and then in the directory of current script. E.g. if your include_path is libraries, current working directory is /www/, you included include/a.php and there is include "b.php" in that file, b.php is first looked in /www/libraries/ and then in /www/include/

更新

コメントのいくつかに対処するには:私は(含まれていることを言っていなかった)を希望CWDを変更してください。私は、CWDがmaster/header.phpの両方がある場所でなければ、それが問題であるかもしれないと言っています。

たとえば、master.phpheader.phpと異なるフォルダにindex.phpがあるとします。適切なパスを使用しているか、またはmaster.phpが必要です。さて、master.phpは声明を持っています

<?php require_once("header.php"); ?> 

CWDがindex.phpのものであるので、この時点でCWD は、header.phpが含まれていません。

はこれを修正するには、master.phpから、header.phpに現在のスクリプトのCWDから適切なパスではありませんパスをrequire_onceを呼び出す必要があります。

+0

getcwd()、http://php.net/getcwdを使用して現在の作業ディレクトリを取得/確認/表示することができます。 include()/ require()はcwdを変更しませんが、chdir()のようなものだけは変更しません。 – VolkerK

+0

私はgetcwd()を使用しました。それは/ Users/MyName/Sites/MySiteを私に与えました - したがってrequire_once( "Views/header.php");うまくいくはずですが、そうではありません。それは私に同じエラーを与える! – asdfasdfasdfasdf

+0

また、Peterは同じディレクトリにない別のスクリプトによってmaster.phpが必要/含まれているという上記の良い点を挙げました。だから私はhttp://localhost/~MyName/MySite/Views/master.phpに行きました。まったく同じエラーが出ます! – asdfasdfasdfasdf

0

あなたはこのように、ライン15を持っている必要があります:

<?php (require_once("header.php")) or die(); ?> 

しかしヘッダーとき以来。あなたのコメントで

<?php (include_once("header.php")) or die(); ?> 

または

<?php require_once("header.php"); ?> 
関連する問題