【问题标题】:Need to Bulletproof this PHP include. Getting Failed to Open Stream需要防弹这个 PHP 包括。无法打开流
【发布时间】:2009-12-23 00:12:31
【问题描述】:

我的文件中有一些函数需要taxonomy.php 才能执行。我正在尝试像这样包含文件...(这是从位于 wp_content/themes/mytheme/ 中的 functions.php 调用的

include($_SERVER['DOCUMENT_ROOT'] .'/wp-admin/includes/taxonomy.php');

但是,取决于特定的服务器设置,它的命中或未命中(主要是命中)是否会找到包含。如果找不到它,我会收到此错误...

警告:包含(/home/user/domainname.com/wp-admin/includes/taxonomy.php)[function.include]:无法打开流:/home/user/domainname 中没有这样的文件或目录。 com/testing123/wp-content/themes/mytheme/functions.php 在第 10 行

更新:假设我已经通过使用 DOCUMENT_ROOT 尽我所能,有没有办法避免在找不到文件时发生错误?我将在任何需要 taxonomy.php 的函数中检查 function_exists 以抑制错误...

【问题讨论】:

    标签: php


    【解决方案1】:

    嗯,防弹的唯一方法是在您部署它的每台服务器上实际配置它。如果您不能假设 document_root 是一个可靠的因素,我无法想象任何其他变量可以为您提供更好的结果。

    您可以开始搜索taxonomy.php,但这很昂贵,而且极易出错或选择错误的文件(如果我的邻居在/home/user/domainname2.com 中安装了wordpress,会发生什么情况?

    【讨论】:

    • 感谢 Pekka,我相信当前的 document_root 方法也是最好的。如果找不到文件,我只需要一种方法来抑制“无法打开流”错误。
    • 嗯,好的。您必须使用file_exists() 来检查文件是否存在。
    • 感谢 Pekka,感谢您的帮助。我将结合使用 file_exists 和 function_exists 来控制错误抑制。
    【解决方案2】:

    如果您的应用程序依赖特定文件,您应该使用require/require_once 以确保您的应用程序在缺少所需文件的情况下不会部分加载。

    至于确保该文件始终存在并且位于您需要的位置,您可以将其移至配置文件并允许运行软件的用户进行设置,同时自动尝试在如果用户一无所知。

    【讨论】:

    • 您好 Nick,该应用程序有 2 个需要 taxonomy.php 的功能,它们对操作并不重要。如果它们尚不存在,我只是自动创建几个类别。用户可以手动创建目录,否则不需要它们的存在。所以,我想如果找不到包含文件,我只需要错误抑制,我似乎无法弄清楚如何抑制“无法打开流”错误。
    • 您显然可以使用@ 来做到这一点,尽管我对在此处发布该内容感到羞耻 ;) 不好的做法。相反,您应该首先使用file_exists()...
    • 谢谢尼克,感谢您的帮助。
    猜你喜欢
    • 2018-11-21
    • 2020-11-15
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    • 2014-04-17
    相关资源
    最近更新 更多