PHP require_once 错误与相对路径

Posted

技术标签:

【中文标题】PHP require_once 错误与相对路径【英文标题】:PHP require_once error with relative path 【发布时间】:2013-10-08 15:27:08 【问题描述】:

我想在 phpunit 中测试我的 php 应用程序。我的问题是 require_once 没有找到我想要测试的文件。我收到此错误:

Warning:
require_once(C:\MyProject\phpunit-tesztek\include/../include/form.php):
failed to open stream: No such file or directory in
C:\MyProject\phpunit-tesztek\include\FormTest.php on line 4

所以它在 include/../include/form.php 中搜索 form.php 文件有什么问题。

我使用了这个代码:

require_once 'PHPUnit/Autoload.php';
require_once(__DIR__.'/../include/form.php');

测试文件位于 C:\MyProject\phpunit-tesztek\include\FormTest.php

我要测试的文件在:C:\MyProject\include\form.php

有什么问题?

【问题讨论】:

问题是你想要的路径(“C:\MyProject\include\form.php")与你指定的路径不匹配:“C:\MyProject\phpunit-tesztek\include/../include/form.php”。从错误信息中应该很清楚了,你看是吗?请参阅answer by Steven Scott。 请分享您目前无法选择答案的原因。有什么不清楚如何解决这个问题吗?请告诉我们。 【参考方案1】:

问题是相对路径。 __DIR__ 使用文件所在的目录,没有尾随分隔符。然后,您将使用相对路径 (/../) 更改路径以向上一个目录。

见手册条目->PHP Manual for __DIR__

__DIR__ will return C:\MyProject\phpunit-tesztek\include

您正在寻找使用C:\MyProject\include\ 路径

__DIR__ . '/../../include/Form.php';

我自己通常使用dirname(__FILE__),因为它获取源代码文件的当前目录(绝对的)允许我的相对路径从该位置移动。

【讨论】:

dirname(__FILE__) 是准确编写 __DIR__ 的过时方式,它是在 PHP 5.3 中引入的,之前不可用。顺便说一句。被引入备用dirname() 电话。仅供参考:) @hakre 感谢您提供的信息。我参考了旧的,因为 5.2 仍在某些领域中使用,对于某些团队来说,您正在获得所传递内容的目录更清楚一些。虽然 DIR 是脚本的目录,但您也可以在另一个变量上使用 dirname() 来检索其路径。\【参考方案2】:

使用魔法常数DIR

require_once(__DIR__ . '/../include/form.php');

【讨论】:

抱歉,好像是 SO 文本解析器问题【参考方案3】:

尝试删除../

require_once(DIR.'include/form.php');

【讨论】:

以上是关于PHP require_once 错误与相对路径的主要内容,如果未能解决你的问题,请参考以下文章

require_once 不起作用(相对路径)

php require_once 没有按我想要的方式工作.. 相对路径问题

PHP require_once 在 Mac OSX Lion 中本地抛出错误

php页面中的包含文件用相对路径(require_once("./smarty/smarty.class.php"))出错了怎么解决

使用 require_once 的路径错误

php require() 不适用于相对或完整