【问题标题】:PHP include/require: Prevent fallback in path resolutionPHP include/require:防止路径解析中的回退
【发布时间】:2015-08-31 06:11:54
【问题描述】:

正如documentation for include() 中的有益说明:

如果在 include_path 中找不到该文件,则 include 最终会在失败之前检查调用脚本自己的目录和当前工作目录。

是否有任何设置可以防止这种情况并使其以某种方式失败?我想知道我的代码何时“认为”文件应该在它们不在的地方。 (或者我至少可以在它发生时添加一个警告?)

我唯一的选择是使用 file_exists() 吗?不知何故感觉不对;我不想推出自己的包含功能。

【问题讨论】:

  • 无法更改默认 PHP 函数的行为。您要么必须编写自己的包含函数类型,要么使用类似 file_exists() 的方法进行检查。
  • 好的。必须是这样,这似乎有点奇怪。我只会忍受我的代码在这些事情上“技术上错误”的可能性,但无论如何都可以正常工作。我应该删除/标记这个问题吗?
  • 我能问一下你为什么要使用 include/require 吗?为什么不使用自动加载器?
  • 我想我认为自动加载器会使事情复杂化,或者只是“错误”地依赖。

标签: php require fallback php-include


【解决方案1】:

等等,如果您不想应用默认的“有用”行为,您只需自己提供一个文件路径即可。

来自PHP manual...

文件是根据给定的文件路径包含的,如果没有给出,则 指定的 include_path。

如果定义了路径 - 无论是绝对路径(以驱动器号开头还是 \ 在 Windows 上,或 / 在 Unix/Linux 系统上)或相对于当前 目录(以 . 或 .. 开头)— include_path 将被忽略 共。例如,如果文件名以 ../ 开头,解析器将 在父目录中查找请求的文件。

【讨论】:

  • 也许我没有说清楚,或者我误解了你。我说的是即使指定了路径但在那里找不到文件的行为。
  • 据我所知,只有在您不提供自己的路径时才会发生后备行为。因此,您可以提供诸如 require_once("./filename.php") 之类的路径,而不必担心涉及可能定义的任何包含路径的任何回退。为避免回退,请始终提供您自己的显式路径详细信息。
  • 啊,这似乎是正确的。我使用 set_include_path 函数可能会影响我的体验,我应该在原始问题中提到它,但认为这不是相关的细节。
猜你喜欢
  • 1970-01-01
  • 2010-12-29
  • 2018-10-03
  • 1970-01-01
  • 1970-01-01
  • 2013-01-26
  • 2011-06-08
  • 2013-04-28
  • 2011-04-24
相关资源
最近更新 更多