5

これが私が数時間苦労してきたコードです:

if ((require $_SESSION['ROOT_PATH'] . '/templates/core/menu_js.php') == 'OK') {
   echo 'OK';
} else {
   echo 'KO';
}

「require」ディレクティブに関する PHP ドキュメントを正しく理解していれば、require が機能しない場合にエラーが発生するため、「KO」を記述しないでください。

私の場合、エラー調整を行っても常に「KO」が表示されます。

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);

同じ require (または include) が、サイトの他のページでも完全に機能することに注意してください。

編集

ドキュメントを見た後、if構造が追加されました。最初は、1行でした:

require $_SESSION['ROOT_PATH'] . '/templates/core/menu_js.php';

この行が機能していないことを確認したので、if.

ところで。必要なページ (機能する場合) は、scriptこの固有のページには表示されないタグを呼び出しページに追加します。この require が使用されている他のページでは、スクリプトが出力に表示されます。

したがって、私の質問は「必要なphpファイルの出力が表示されない場合、なぜエラーが発生しないのですか?」ということです。

4

5 に答える 5

4

ドキュメントによると

インクルードされたファイルによって上書きされない限り、成功したインクルードは 1 を返します... また、インクルードされたファイルから値を返すことも可能です。通常の関数の場合と同様に、include 呼び出しの値を取得できます。

したがって、ファイルは「OK」を返しません。1 (成功の場合) またはカスタム値のいずれかを返します。

require標準関数ではなく、言語構造です。を使用requireすることで、ファイルが見つからない場合にコードが失敗することを既に示しています。ほとんどの場合、戻り値を確認する必要はありません。

于 2012-10-18T13:28:12.650 に答える
3

menu_js.phpこれは、が含まれている場合にのみ期待どおりに機能しますreturn 'OK';。それ以外の場合はrequire問題なく動作しますが、戻り値は「OK」ではないため、「KO」条件がトリガーされます。require戻りません'OK'requireが機能しない場合、プログラムはすぐに停止されます。あなたのfalse状態は、あなたが思っているようにヒットすることはありません.

于 2012-10-18T13:32:12.313 に答える
2

ここにはいくつかの間違いがあります:

  1. PHPのドキュメントによると:

    requireinclude失敗すると致命的なE_COMPILE_ERRORレベルのエラーが発生することを除いて、 と同じです。

    致命的なエラーが発生すると、スクリプトの実行が停止します。

  2. requireインクルードされたファイルが返すものを返します。

    // a.php
    return 'test';
    
    // b.php
    $result = require 'a.php';
    echo $result; // will display 'test'
    

requireしたがって、 !の戻り値をテストしないでください。を使用is_file()し、場合trueは、そのファイルが必要です!

于 2012-10-18T13:33:43.847 に答える
1

requireではご利用いただけませんif

これを使って

if(file_exists($_SESSION['ROOT_PATH'] . '/templates/core/menu_js.php'))
{
 echo 'OK';
} else {
   echo 'KO';
}
于 2012-10-18T13:28:23.920 に答える
1

require が何も返さないことは事実ですが、括弧内の左側の値が「OK」になることは決してないため、条件付きで常に「KO」を返すようにします。display_errors ini 値を設定することで、ファイルが失敗したかどうかを確認できます。このスクリプトでは一時的にオンにします。

これをキャッチするようにエラー報告を設定しているため、おそらく display_errors がオフになっているため、これは表示されません。このスクリプトに次のように設定します。

ini_set('display_errors', 'on');
于 2012-10-18T13:31:54.943 に答える