require_once 在文件相对于根目录时不起作用,但在相对于当前位置时起作用

Posted

技术标签:

【中文标题】require_once 在文件相对于根目录时不起作用,但在相对于当前位置时起作用【英文标题】:require_once doesn't work when the file is relative to the root, but works when relative to the current location 【发布时间】:2018-09-28 13:54:32 【问题描述】:

这有效:require_once '../../include/common.php' 但这不是:require_once '/include/common.php' 但这有效:<a href = '/include/common.php'>

我收到此错误: 警告:require_once(/include/common.php):打开流失败:C://C:\wamp64\www\src\views\search.php 中没有这样的文件或目录

如果它作为链接起作用,为什么它不适用于 require_once?

感谢您的帮助:)

【问题讨论】:

errors. 看到这个答案:***.com/questions/5371828/… 是的,对不起,我忘了包括!警告:require_once(/include/common.php):打开流失败:没有这样的文件或目录 【参考方案1】:

在 require_once 中使用相对路径通常被认为是不好的做法,会导致容易出错的情况。

更好的解决方案是在你的 php.ini 文件中正确设置 include_path。

或者你可以使用这样的东西:

require_once dirname(__FILE__) . "/../../yourscript.php";

希望对你有帮助。

【讨论】:

您也可以使用require_once(__DIR__."/../../yourscript.php"); 获取更新版本的 PHP。【参考方案2】:

如果您对 require_once 有问题,请始终使用绝对路径(文件系统),如下所示:

require_once '/folder1/folder2/folder3/file.php'

在您的情况下,require_once '/include/common.php' 不是“相对于根”。这是一个不存在的绝对文件系统路径。

尝试在文件夹中使用print_r(__DIR__); 是否要包含文件并查看文件系统的绝对路径。

以下<a href = '/include/common.php'> 有效,因为它与域名相关。

Reading this 可能会帮助您了解文件系统路径网络服务器路径之间的区别。

【讨论】:

【参考方案3】:
require_once '/include/common.php'

<a href = '/include/common.php'>

他们没有指向同一个文件。 在第一种情况下,您将在系统文件根目录的/include 中包含common.php。 在第二种情况下,您将在 VHost 根目录的 /include 中包含 common.php

这就是../../include/common.php/include/common.php 不同的原因

【讨论】:

以上是关于require_once 在文件相对于根目录时不起作用,但在相对于当前位置时起作用的主要内容,如果未能解决你的问题,请参考以下文章

require_once 不起作用(相对路径)

相对路径在 cron PHP 脚本中不起作用

外部文件中 Javascript 中的相对路径

require_once在实时服务器上不起作用

ajax调用时不执行Require_once

require_once 导致“没有这样的文件或目录”错误