Php 文件不存在';不存在,但可以要求一次
start.phpPhp 文件不存在';不存在,但可以要求一次,php,windows,filesystems,require,file-exists,Php,Windows,Filesystems,Require,File Exists,start.php <?php if(file_exists('/config.php')) require_once('/config.php'); echo TEST; ?> <?php define('TEST','Hamsters'); ?> file\u exists()怎么能说文件不存在,但没有条件仍然能够require\u once()声明不存在的文件?设置require(或include)条件是你根本不应该做的事情: if (file_exists('
<?php
if(file_exists('/config.php')) require_once('/config.php');
echo TEST;
?>
<?php
define('TEST','Hamsters');
?>
file\u exists()
怎么能说文件不存在,但没有条件仍然能够require\u once()
声明不存在的文件?设置require(或include)条件是你根本不应该做的事情:
if (file_exists('/config.php')) {
require_once('/config.php');
}
相反,如果不是必须的话,可以采取include
,如果是必须的话,可以采取require
。另见:
包含一次,而不是require\u once
,if是多余的:
include_once('/config.php');
我想是这样的
require_会尽力查找该文件,如果它在工作目录或调用脚本的目录中找到一个文件,它会将该目录视为根目录,以便解释前导斜杠
文件_exists更紧:它查找绝对文件系统路径并报告未找到该路径
a、 php:
echo 'a';
主脚本:
require_once ('/a.php');
echo '<br/>',file_exists('/a.php') ? 'exists' : 'not';
确认:
require_once ('./a.php');
echo '<br/>',file_exists('./a.php') ? 'exists' : 'not';
问题是/config.php
实际上意味着C:/config.php
仅检查实际文件或文件夹是否存在,如果不存在,将给出一个false
还有一些。根据PHP手册,此函数与几乎相同的函数几乎相同。在我们的案例中,不相同的部分并不重要。手册中提到的重要内容包括:
根据给定的文件路径包含文件,如果未给定,则根据指定的包含路径包含文件如果在include_路径中找不到该文件,include最终将签入调用脚本自己的目录和当前工作目录,然后失败
因为config.php
与start.php
在同一个目录中,所以在require_once()
发现config.php
不在C:///code>中之后,它在start.php
调用他的目录中搜索并找到了它File\u exists()
不执行此搜索,因此它返回false,并且无法调用require\u once()
如果我将我的config.php
文件复制到C://
中,它也会以文件\u exists()
的方式工作。Wow,这让我想起了圣经中的故事,比如生孩子而不怀孕。请放心,当PHP需要一个文件时,它确实存在。根据定义。因此,你应该更加怀疑你认为它不存在的事实。哦,如果你不知道,有一个叫做include_path的东西,它是一个设置:可能是因为前面的/
。如果您的文件位于C:\Web\path\to\website\中,那么include/config.php将包括C:\config.php。那么这个问题呢:?这个问题应该是什么?从技术上讲,它给出了正确的答案,然而,只有这样才能做,这并不意味着你应该这样做。我是说这是互联网。你发现有足够多的疯子认为某样东西足够酷或足够好(甚至不像现在所说的那么棒,一切都很棒)。真的,如果文件不存在,include不会中断,回答这个问题的人一定没有清楚地指出。好的,我理解你所说的。您的回答很有帮助,但没有回答问题。嗯,文件确实存在于包含路径中,但是当您使用file\u exist
时,您不会在包含路径中搜索该文件。这就是我上面已经说过的。答案仍然有效。只需使用include\u一次
,它将在include路径中测试该文件,如果该文件存在,则将包含该文件。如果没有,将留下一个警告。@totymedli:你在“答案”中所说的一切都是微不足道的真实。我在发布前阅读了手册,并假设您也阅读了手册。它还明确指出:“如果定义了一个路径——无论是绝对路径(在Windows或Unix/Linux系统上以驱动器号或\开头)还是相对于当前目录(以.or..开头)——include_路径都将被完全忽略。”这里唯一有趣的是,需要_最终忽略前导斜杠。
a
not
require_once ('./a.php');
echo '<br/>',file_exists('./a.php') ? 'exists' : 'not';
a
exists