PHP:包含和需要文件时抛出错误

Posted

技术标签:

【中文标题】PHP:包含和需要文件时抛出错误【英文标题】:PHP: Error thrown when including and requiring files 【发布时间】:2012-07-03 10:04:36 【问题描述】:

我尝试创建一个引导文件,但每当我尝试在另一个文件中包含或要求它时,就会不断出现这样的错误:

警告: require_once(../folder/file.php) [function.require-once]:无法打开流:没有这样的文件或目录...

致命错误: require_once() [function.require]: 无法打开所需的 '../folder/file.php' (include_path='.:') in...

绘制整个场景: 我有一个引导文件 load.php。在其中,我连接到位于 ../config/config.php 的配置文件。在加载文件上方,我在 classes/database.php 中有一个数据库类文件。在数据库文件中,我写了这个 if 语句:

           if ( file_exists('../load.php') ) 
               echo 'load.php: It exists';
               require_once('../load.php');
            else 
                  echo 'load.php: It does not exist';
                  

在加载文件中,我写了一个类似的 if 语句,但检查配置文件是否存在。令人惊讶的是,当我加载 database.php 文件时,我得到:

load.php: It exists
config.php: file doesn't exist

但是当我加载 load.php 文件时,我得到:

config.php: It exists

这是我的文件所在的位置:

根目录: /Library/WebServer/Documents/project

config.php 文件 /Library/WebServer/Documents/project/config/config.php

load.php 文件: /Library/WebServer/Documents/project/includes/load.php

database.php 文件: /Library/WebServer/Documents/project/includes/classes/database.php

我需要有关此错误的帮助。 谢谢,

【问题讨论】:

我很难跟上。您可以发布您的完整代码并截取文件结构的屏幕截图或 ascii-art 吗?这将使每个人的事情变得更容易。 您正在使用文件的相对路径。您能否解释一下它们所在位置的文件结构...这将有助于解释此错误。 仔细检查您的路径。另外,这是从哪里来的config.php: file doesn't exist 如果 bootstrap 目录中有 load.php 和 config.php。那么你应该注意相对路径... 我在主帖底部包含了我的文件路径。 【参考方案1】:

使用dirname(__FILE__) . '../relative/path/from/file/in/which/opened/to/config.php'。从 PHP 5.3 开始,还有 __DIR__ 常量

【讨论】:

谢谢。在使用dirname(__DIR__) 进行修改后,我让它工作了。为什么这行得通?使用以下命令简单地上下目录有什么问题:../ ../../folder/file.php 因为当你将某个文件包含到另一个文件中时(例如,有三个:index.php、config/config.php 和 app/bootstrap.php)符号点指的是另一个目录。例如 index.php: require 'app/bootsrap.php'; app/bootstrap.php /* wrong reference to file because '..' refers to dirname of index.php file */ require '../config/config.php'; config/config.php /* just do nothing */ 可以使用@ 987654330@ 来证明这种行为。 谢谢。我可以使用getcwd(),而不是使用dirname(__FILE__)dirname(__DIR__)。例如:require_once(getcwd . "/" . "file.php")

以上是关于PHP:包含和需要文件时抛出错误的主要内容,如果未能解决你的问题,请参考以下文章

PHP 在尝试包含/需要包含/需要另一个脚本的脚本时抛出致命错误

AVAudioPlayer 在使用 M4A 文件初始化时抛出。 (OSStatus 错误 2003334207。)

PHP在准备SQL语句时抛出致命错误[重复]

在 oracle apex 中使用 sqlerm 和异常时抛出重复的错误代码

运行 sudo gem install fastlane -NV 在安装 fastlane ruby​​zip 需要 ruby​​ version >= 2.4 时抛出错误

传递带有@JsonIgnore 标记的属性时抛出错误