5

这是我努力了几个小时的代码:

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文件的输出,为什么没有引发错误?”

4

5 回答 5

4

根据文档

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

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

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

于 2012-10-18T13:28:12.650 回答
3

这只适用于您期望 if menu_js.phpcontains的方式return 'OK';。否则require工作正常,但返回值不是“OK”,这就是触发“KO”条件的原因。require不返回'OK'。如果require不起作用,程序将立即停止,您的false状况将永远不会像您认为的那样受到打击。

于 2012-10-18T13:32:12.313 回答
2

这里有一些错误:

  1. 根据 PHP 文档:

    require与失败相同,include但它也会产生致命E_COMPILE_ERROR级别的错误。

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

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

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

所以,不要测试require!的返回值 使用is_file(), then if true, 需要该文件!

于 2012-10-18T13:33:43.847 回答
1

虽然 require 确实不会返回任何内容,但使条件始终返回“KO”,因为括号中的左侧值永远不会等于“OK”,您可以通过设置 display_errors ini 值来检查文件是否失败在这个脚本中暂时打开。

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

ini_set('display_errors', 'on');
于 2012-10-18T13:31:54.943 回答
1

你不能requireif

用这个

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