PHP require失败,没有错误

PHP require失败,没有错误,php,include,require,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 |

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

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);
请注意,相同的require(或include)在站点的其他页面中也能完美地工作

编辑

查看文档后,添加了if结构。 起初,我只有一句话:

require $_SESSION['ROOT_PATH'] . '/templates/core/menu_js.php';
当我检查这一行没有工作时,我添加了
if

顺便说一下。Required page(当它工作时)向调用页面添加了一个
脚本
标记,这是我在这个独特页面上从未见过的。在使用此require的任何其他页面上,脚本将显示在输出上

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

根据

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

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


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

如果
if,则不能在
中使用
require

用这个

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

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

由于已将错误报告设置为捕获此错误,因此显示错误可能已关闭,因此不会显示此错误。为此脚本设置如下所示:

ini_set('display_errors', 'on');

只有当
菜单_js.php
包含
返回“OK”时,这才是您期望的工作方式。否则,
require
工作正常,但返回值不是“OK”,这就是触发“KO”条件的原因
require
不返回
“确定”
。如果
require
不起作用,程序将立即停止,您的
false
条件将永远不会像您认为的那样受到影响。

这里有一些错误:

  • 根据PHP文档:

    require
    include
    相同,除非失败,否则它还会产生致命的
    E_编译_错误
    级别错误

    致命错误将停止脚本执行

  • require
    返回包含的文件返回的内容:

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

  • 因此,不要测试
    require
    的返回值!使用
    is_file()
    ,如果
    true
    ,则需要该文件

    感谢您的回答,但是,正如我在问题中所说的,在我的站点的许多其他页面中都使用了完全相同的行(例如“require”行),因此我确信该文件存在。@jhonraymos:来自PHP include手册:Successful includes,除非被包含的文件覆盖,否则返回1。可以在包含的文件中执行return语句,以终止该文件中的处理并返回到调用它的脚本。您的第一句话是我的答案:您不能在if中使用require,但它在文档中的编写位置?menu_js.php是否确实有一个语句说:return‘OK’?如果不是,它总是说“KO”。另见:你是对的。这就是为什么我不明白为什么会显示“KO”。