如何在PHP中列出require_once()搜索的路径?

4
我们都见过这个错误:

Warning: require_once(test/blah.inc) [function.require-once]: failed to open stream: No such file or directory in /home/narf/narf.inc on line 3

Fatal error: require_once() [function.require]: Failed opening required 'test/blah.inc' (include_path='.:/usr/lib64/php:/usr/lib/php:/home/narf/inc:/home3/narf/php:/home3/narf/inc/dev:') in /home/narf/narf.inc on line 3

非常恼人。

我需要的是:一些PHP代码片段,可以列出正在搜索包含文件的路径。

据我所见,我已经正确设置了我的路径(上述包含场景只是虚构的),我可以从项目的其他部分成功地包含该文件。

但是,我就是无法让它工作。如果我有一个正在搜索的位置列表,我可以轻松追踪到我缺失的路径,并确定为什么我的require/include不起作用。

您有什么想法吗?有没有人有可共享的代码片段?

提前谢谢您!:)

编辑:值得一提的是,我认为我找到了问题的根源,但如果您仍然有一些可以帮助解决问题的内容,将来也会对此有所帮助!:)

编辑2:感谢所有回答者。获取包含路径很好,但我正在寻找实际的绝对路径,这些路径是正在搜索的目录。我挑剔的原因是在使用相对路径时会变得混乱。此外,我怀疑还有其他一些问题,例如(可能)在给定的设置中是否遵循符号链接等。


终于找到正确的路径了。原来我需要:"require_once('../../../www/blog/wp-load.php');" 这毫无意义,但至少我的脚本现在可以运行了。也许我稍后会为大家编写一个脚本,列出所有搜索的绝对路径。 - rinogo
另外,我应该最初提到我在我的包含语句中使用相对路径(有时是 '../x/y/z',有时只是 'x/y/z'),所以 PHP 的包含路径只部分相关(仅在 'x/y/z' 包含的情况下)。从 include() 的文档中可以看到:“如果定义了路径 - 无论是绝对路径还是相对于当前目录(以 . 或 .. 开头) - include_path 将被完全忽略。” - rinogo
3个回答

6
你想要使用 get_include_path() 函数,该函数的详细说明可在 文档 中找到。

3
引用include页面的手册:
文件包括基于给定的文件路径,如果没有给出,则是指定的include_path。如果在include_path中找不到该文件,则include()将在调用脚本自己的目录和当前工作目录中检查,然后失败。
include_path是一个配置指令,其中包含以下内容(引用):
指定require()include()fopen()file()readfile()file_get_contents()函数查找文件的目录列表。
它可以在您的php.ini文件中进行配置,也可以在运行时使用set_include_path()函数进行配置。
当然,要获取包含路径,您需要使用get_include_path()

选择这个答案作为“正确”答案,因为它将对访问此页面的大多数人有所帮助。从技术上讲,我正在寻找一些能够给我一个被搜索的绝对路径列表的东西,但似乎这并不存在。创建一个函数来做这件事并不会太复杂;也许我会回顾这个问题并稍后发布代码片段。感谢所有回答我的人! :) - rinogo

1

路径在错误信息中列出:它是include_path中的值


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接