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。)
在 oracle apex 中使用 sqlerm 和异常时抛出重复的错误代码
运行 sudo gem install fastlane -NV 在安装 fastlane rubyzip 需要 ruby version >= 2.4 时抛出错误