PHP要求失败,没有错误

时间:2012-10-18 13:26:58

标签: php include require

以下是我几个小时都在苦苦挣扎的代码:

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

如果我正确理解了“require”指令的PHP文档,就不应该写“KO”,因为如果require不起作用,就会引发错误。

在我的情况下,即使出现错误调整,也会始终显示“KO”:

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);

请注意,相同的要求(或包含)在网站的其他页面中完美有效。

修改

在观看文档后添加了if结构。 起初,我只有一行:

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

当我检查此行不起作用时,我添加了if

顺便说一下。必需页面(当它工作时)将script标签添加到我在此唯一页面上从未看到的调用页面。在使用此要求的任何其他页面上,脚本将显示在输出中。

所以我的问题应该是“如果没有显示所需php文件的输出,为什么没有引发错误?”

5 个答案:

答案 0 :(得分:4)

根据the documentation

  

成功包含,除非被包含文件覆盖,否则返回1 ...此外,还可以从包含的文件返回值。您可以像使用普通函数一样获取包含调用的值。

所以你的文件没有返回'OK'。它返回1(成功)或自定义值。

require是一种语言结构,而不是标准函数。通过使用require,您已经指示如果找不到该文件,代码应该会失败。您很可能不需要检查返回值。

答案 1 :(得分:3)

只有在menu_js.php包含return 'OK';的情况下,才会按预期方式运行。否则require工作正常,但返回的值不是“OK”,这就是触发“KO”条件的原因。 require不会返回'OK'。如果require不起作用,程序会立即停止,您的false条件将永远不会按您认为的方式进行。

答案 2 :(得分:2)

这里有一些错误:

  1. 根据PHP文档:

      

    requireinclude相同,但失败后也会产生致命E_COMPILE_ERROR级错误。

    致命错误将阻止您的脚本执行。

  2. require返回包含文件返回的内容:

    // a.php
    return 'test';
    
    // b.php
    $result = require 'a.php';
    echo $result; // will display 'test'
    
  3. 所以,不要测试require的返回值!使用is_file(),如果true,则需要该文件!

答案 3 :(得分:1)

您无法在require

中使用if

使用此

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

答案 4 :(得分:1)

虽然确实需要返回任何内容,但条件总是返回'KO',因为括号中的左手值永远不会等于'OK' ,您可以通过暂时设置此脚本中的display_errors ini值来检查文件是否出现故障。

由于您已将错误报告设置为捕获此信息,因此您的display_errors可能已关闭,因此不会显示此信息。像这样为这个脚本设置它:

ini_set('display_errors', 'on');