Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 文件不存在';不存在,但可以要求一次_Php_Windows_Filesystems_Require_File Exists - Fatal编程技术网

Php 文件不存在';不存在,但可以要求一次

Php 文件不存在';不存在,但可以要求一次,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('

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('/config.php')) {
  require_once('/config.php');
}
相反,如果不是必须的话,可以采取
include
,如果是必须的话,可以采取
require
。另见:

将include/require包装到条件中会使这些条件变得复杂,而as-include通常与您真正希望保持简单的程序流相关

此外,您可能希望稍后使用的一些优化不可能与条件包含一起使用

在你的情况下,我想知道你为什么要检查文件的存在。您最肯定的意思是
包含一次,而不是
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