以下是我几个小时都在苦苦挣扎的代码:
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文件的输出,为什么没有引发错误?”
答案 0 :(得分:4)
成功包含,除非被包含文件覆盖,否则返回1 ...此外,还可以从包含的文件返回值。您可以像使用普通函数一样获取包含调用的值。
所以你的文件没有返回'OK'。它返回1(成功)或自定义值。
require
是一种语言结构,而不是标准函数。通过使用require
,您已经指示如果找不到该文件,代码应该会失败。您很可能不需要检查返回值。
答案 1 :(得分:3)
只有在menu_js.php
包含return 'OK';
的情况下,才会按预期方式运行。否则require
工作正常,但返回的值不是“OK”,这就是触发“KO”条件的原因。 require
不会返回'OK'
。如果require
不起作用,程序会立即停止,您的false
条件将永远不会按您认为的方式进行。
答案 2 :(得分:2)
这里有一些错误:
根据PHP文档:
require
与include
相同,但失败后也会产生致命E_COMPILE_ERROR
级错误。
致命错误将阻止您的脚本执行。
require
返回包含文件返回的内容:
// a.php
return 'test';
// b.php
$result = require 'a.php';
echo $result; // will display 'test'
所以,不要测试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');