Php 即使存在位置,也无法打开流

Php 即使存在位置,也无法打开流,php,Php,我正在尝试使用以下内容包含一个文件: require_once '../config/configVARS.php'; 但我得到了一个错误: Warning: require_once(../config/configVARS.php): failed to open stream: No such file or directory in ..../classes/FileHandler.php on line 2 Fatal error: require_once(): Failed o

我正在尝试使用以下内容包含一个文件:

require_once '../config/configVARS.php';
但我得到了一个错误:

Warning: require_once(../config/configVARS.php): failed to open stream: No such file or directory in ..../classes/FileHandler.php on line 2

Fatal error: require_once(): Failed opening required '../config/configVARS.php' (include_path='.:/opt/lampp/lib/php') in ..../classes/FileHandler.php on line 2
如果我尝试在同一文件夹中包含一个文件,我不会有任何错误(例如,当我将configVARS文件复制到同一文件夹时,我可以包含它)

我检查了权限,但不是权限(也不是所有权)


有什么想法吗?什么会导致它?

相对包含始终是一个棘手的问题,相对路径可能与您认为的不同,这取决于您将其包含在其中的文件。最佳做法是使用绝对引用,通常是通过使用定义的常量作为前缀,例如:

define('BASE_PATH', $_SERVER['DOCUMENT_ROOT']);

require_once(BASE_PATH . 'path_to_include');
这里有更好的解释:


检查文件是否确实存在,如果不确定使用的文件名是否正确,请使用绝对路径而不是相对路径

包含您将其写入的文件的绝对位置,因此

require_once __DIR__ . '/concrete/path/to/file.php';

通常更明显,因为您实际上似乎知道文件的确切位置-似乎不需要预先配置的包含目录来查找文件。

检查文件是否确实存在。如果您不确定使用的文件名是否正确,请使用绝对路径而不是相对路径。魔法常量
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu/concrete/path/to/file.php'
通常更清晰,因为您实际上似乎知道文件的确切位置,所以似乎不需要预先配置的include目录来查找。回答得很好。如果你把它作为答案贴出来,我肯定会投你一票!我经历了一段艰难的时光,直到我意识到linux是区分大小写的,我正在检索一个以大写file.PHP结尾的文件,但真正的文件只是小写,在这件事上也要小心。已经有一个常量,你甚至不需要定义,它被称为
\uuuuu DIR\uuuuu
,它独立于Web服务器的文档根目录,而文档根目录可能不是应用程序的根路径(除非您只想在整个服务器上承载一个应用程序)。我知道这个常数,大多数情况下,服务器上只运行一个应用程序。如果站点增长,这种情况很可能不会再发生了,集成的麻烦只会因为没有提供更灵活的解决方案而开始。另外,
$\u服务器中的内容取决于环境为您提供的内容。这是一个不受您完全控制的依赖项,例如在CLI中无法工作。并不是说你一开始就遇到了这些问题,而是为什么一开始就把事情复杂化?除此之外,对于发布的具体代码OP,您建议的定义通常是不必要的。保持简单我明白了。最好的做法是使用一个定义为基本路径的常量进行全局include,可以按照建议的DIR或getcwd()进行。大多数大型应用程序都采用这种方法。哦,现在您实际上需要一个全局require行,它需要您建议的基本常数来定义该基本常数;)。无论如何,我可以给出一个建议,如果这些大型应用程序的开发人员仍然认为这种方法是好的,那么我可以与他们进行交流。看看这样的项目的历史,也看看更现代的软件,这是更多的工作,但是有更多的价值,让更多的洞察力,以了解为什么事情是以一种特定的方式解决,而不仅仅是如何解决。