【问题标题】:PHP include file by relative pathPHP通过相对路径包含文件
【发布时间】:2013-03-25 16:06:20
【问题描述】:

这个绝对路径成功包含了我的文件httpapi.inc.php

require_once '/home/devel/wwwroot/nm/dev/http-api/http-api/src/httpapi.inc.php';

调用文件是:

调用者相关:

/devel/phi/dev/appcenter-head/appcenter/application/nm/index.php

来电位置:

/home/devel/wwwroot/phi/dev/appcenter-head/appcenter/application/nm

现在,我怎样才能根据相对路径包含同一个文件,例如:

/devel/nm/dev/http-api/http-api/index.php

我必须“按原样”使用此路径,因为它是用户传递的配置选项。

【问题讨论】:

标签: php path include


【解决方案1】:

require()include() 应该相对于配置的include paths 和当前执行的脚本进行操作。所以,这应该工作:

require_once('src/httpapi.inc.php');

不过,准确地说,当前脚本的直接运行实际上被指定为默认配置中的包含路径之一。如果你搞砸了它就行不通了。

使用 .在包含路径中允许相对包含,因为它意味着 当前目录。

关于您的最新编辑,您的路径已经完全不同,因此使用完整路径或将 /home/devel/wwwroot/nm/dev/http-api/http-api/ 添加到您的配置并使用 require_once('src/httpapi.inc.php') 会更简单。

【讨论】:

  • 忘记添加调用脚本所在的位置,请看我的编辑。
  • 谢谢。我怎样才能获得完整的路径?我使用realpath 的所有尝试都失败了。
  • 我不明白这个问题。你知道路径。只需使用它和/或将部分但绝对的路径作为包含路径的一部分放入您的配置中。
  • 是的,我现在知道我自己系统上的完整路径,但如果我安装在其他地方,我需要一个功能,通过这个相对路径为我提供完整路径。
  • 是的......我一直在努力理解你所呈现的场景,每次我读到它时,我都会对你想要完成的事情感到更加困惑。如果您允许用户(可能是受信任的开发人员)提交文件路径以包含在处理中,他们需要提供相对于某些公共根目录的路径,例如 /home/devel/。然后,选择它们的路径并将它们连接起来。 require_once('/home/devel/' . $dev_script)。不要试图创造奇迹,让开发人员能够指定没有共同点的路径。
【解决方案2】:

您可以使用 $_SERVER 变量中的文档根目录: http://www.php.net/manual/en/reserved.variables.server.php

require_once $_SERVER['DOCUMENT_ROOT'] . '/nm/dev/http-api/http-api/src/httpapi.inc.php';

【讨论】:

  • 失败并出现致命错误:Failed opening required '/opt/nm/appcenter40-server-php53/htdocs/nm/ dev/http-api/http-api/src/httpapi.inc.php'
【解决方案3】:
 include "src/httpapi.inc.php";

【讨论】:

    猜你喜欢
    • 2012-06-19
    • 2014-04-24
    • 1970-01-01
    • 2019-04-21
    • 2013-04-09
    • 2014-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多