如何让 require_once 从上面的目录中获取文件?

Posted

技术标签:

【中文标题】如何让 require_once 从上面的目录中获取文件?【英文标题】:How can I make require_once fetch a file from the directory above? 【发布时间】:2013-09-28 19:12:22 【问题描述】:

我正在尝试在新服务器上建立一个我不是原始所有者的站点 - 在 Apache2 中,文档根目录已设置为 /var/www/html,即 index.php 所在的位置我想成为默认的“主页”所在的位置。

在 www 的其他目录中有许多文件。例如,/common/cachelite/Lite.php 也可以在 /var/www 中找到。

index.php 中的 php 使用 require_once 引用它,如下所示:

error_reporting(E_ALL);
ini_set('Display_errors','On');
require_once('../common/cachelite/Lite.php');

但抛出以下错误,我从我的 Apache2 error.log 中获取:

PHP Fatal error:  require_once(): Failed opening required '../common/cachelite/Lite.php' (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/html/index.php on line 4

文件本身肯定存在,所以有人可以帮我解释一下这个问题吗?怎么回事?

【问题讨论】:

require/include 不受网络服务器的文档根目录的约束。这是一个只存在于网络服务器中的概念。 PHP 只能看到文件系统,并且可以访问其包含的用户 ID 可以访问的任何文件/目录。 我也这么想,但我似乎不需要这个文件这一事实让我质疑自己的知识...... 将自己放入一个打开到与您的 php 脚本相同的目录的 shell 中。然后找出../whatever 路径应该是什么,以便从脚本所在的位置到包含的文件所在的位置。这将是您在 PHP 中需要的路径。 是的,但那是..(上一个目录),然后进入/common/cachelite/Lite.php,所以'../common/cachelite/Lite.php',这正是我所拥有的.由于某种原因它不起作用...我可以通过执行 nano ../common/cachelite/Lite.php 或 cd 使用该路径从 index.php 目录中导入文件...我是否遗漏了一些明显的东西? 说打开失败,而不是“没有这样的文件”,所以可能是权限问题。确保您运行脚本的帐户具有对文件夹和实际文件的写入。 【参考方案1】:

我遇到过几次这个问题,总是这样解决。

$file = dirname(dirname(__file__));
require_once($file ."/common/cachelite/Lite.php");

进一步缩小范围。

试试这个 如果在 Web 服务器上而不是在命令行上添加

 标签。

echo __file__ . "\n";
echo dirname(__file__). "\n";
echo dirname(dirname(__file__)). "\n";

我的下一个想法是,文件权限或拼写错误的单词。

【讨论】:

恐怕没有为我解决这个问题,和以前一样的错误(显然,行号被推到 5)【参考方案2】:

您可以将代码更改为类似

require_once($_SERVER['DOCUMENT_ROOT'].'/common/cachelite/Lite.php');

或者你也可以这样做:

require_once(dirname(__FILE__).'/common/cachelite/Lite.php');

【讨论】:

不起作用,我最终得到PHP Fatal error: require_once(): Failed opening required '/var/www/html/common/cachelite/Lite.php' (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/html/index.php on line 4【参考方案3】:

检查您尝试要求/包含的文件的权限。如果访问/网络用户无法读取它们,那么这将解释您遇到的错误。

【讨论】:

以上是关于如何让 require_once 从上面的目录中获取文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何从不同的目录 require_once?

PayPal Rest SDK API - 获取令牌

如何让容器从上到下向下滚动

无法让本地主机上的 ajax 调用 require_once 工作

require_once :无法打开流:没有这样的文件或目录

Require_once 无法打开流:没有这样的文件或目录