start.php
<?php
if(file_exists('/config.php')) require_once('/config.php');
echo TEST;
?>
的config.php
<?php
define('TEST','Hamsters');
?>
我有PHP版本5.3.8的Windows XP + XAMPP 如果我运行start.php它会给我这个错误:
注意:使用未定义的常量TEST - 在第3行的C:\ programs \ xampp \ htdocs \ start.php中假定为'TEST'
现在我将start.php修改为以下内容,他给了我Hamsters
:
<?php
require_once('/config.php');
echo TEST;
?>
file_exists()
如何说文件不存在但没有条件仍然能够require_once()
声称不存在的文件?
答案 0 :(得分:2)
制作一个require(或include)条件是你根本不应该做的事情:
if (file_exists('/config.php')) {
require_once('/config.php');
}
相反,如果不是必须,请选择include
,如果必须,则选择require
。另见:
将include / require包含在条件中会使这些变得复杂,并且包含通常与程序流程相关,您真的希望保持简单。
此外,您可能希望稍后使用某些优化条件包含。
在你的情况下,我想知道为什么你实际检查文件是否存在。而require_once
你肯定意味着include_once
而不是include_once('/config.php');
,而if是多余的:
{{1}}
答案 1 :(得分:1)
这就是我认为的。
require_once尽力找到该文件,如果它在工作目录或调用脚本的目录中找到文件,它会将该目录视为根目录,以便解释前导斜杠。
file_exists更紧密:它查找绝对文件系统路径并报告未找到它。
a.php只会:
echo 'a';
主脚本:
require_once ('/a.php');
echo '<br/>',file_exists('/a.php') ? 'exists' : 'not';
的产率:
a
not
确认:
require_once ('./a.php');
echo '<br/>',file_exists('./a.php') ? 'exists' : 'not';
的产率:
a
exists
答案 2 :(得分:0)
问题是/config.php
实际上意味着C:/config.php
。
File_exists()仅检查实际文件或文件夹(如果存在),如果不存在,则会检查false
。
Require_once()做了更多。根据PHP手册,此函数几乎与require()相同,几乎与include()相同。在我们的例子中,不相同的部分并不重要。重要的是,手册中说的包括:
根据给定的文件路径包含文件,如果没有给出,则指定include_path。 如果在include_path中找不到该文件,include将最终检查调用脚本自己的目录和当前工作目录,然后才会失败。
由于config.php
位于start.php
所在的同一目录中,因此在require_once()
发现config.php
不在C:/
之后,它已搜索并找到了start.php
称呼他的目录。 <{1}}不执行此搜索,因此返回false并且无法调用File_exists()
。
如果我将require_once()
文件复制到config.php
,它也可以使用C:/
方式。