【问题标题】:PHP Handling script inclusion without supressing its errors and warningPHP处理脚本包含而不抑制其错误和警告
【发布时间】:2018-01-29 21:06:18
【问题描述】:

我试图猜测如何实现脚本包含并保持它抛出错误和警告。我有以下代码:

if(!@include_once "myscript.php") doSomething();

如果脚本文件不存在,这将抑制“包含”警告错误,如果脚本文件存在,它将包含该脚本文件。当“myscript.php”中生成错误时,问题就出现了。例如,我在“myscript.php”中有另一个require_once,我通过设置错误的路径导致了错误。错误不会显示,调用之后的代码也不会到达/执行。

有没有一种方法可以只抑制文件包含错误,但不能抑制包含脚本中生成的错误?如果不是,我可以使用其他什么方式来实现目标行为?

我考虑过使用file_exists 函数来检查脚本文件是否存在,如果TRUE 则包含它,但我正在寻找最简单的方法。

我将举一个实际的例子,因为实际问题很难理解:

假设我们要管理一个将被用户使用的文件系统,我们需要检查用户是否创建了一个文件,因为该文件将在检查后被包含,但我们想要处理包含警告/错误,因此我们可以在自定义日志文件中显示消息或记录警告。我们想到的第一个功能是使用file_exists 然后include 该文件。好吧,通过使用@include,这两个函数都在执行,它会检查文件是否存在,它将包含文件,这就是我正在研究的,最简单的执行操作的方法。这种做法有一个不受欢迎的行为:它抑制了包含文件生成的错误/警告,而不仅仅是包含错误/警告本身。当您在尝试包含文件之前检查文件是否存在时,避免使用file_exists 的其他原因可能是两个函数查找文件的方式不同,并且由于include_path,它们可能会生成不同的结果。这是正确的吗?

【问题讨论】:

  • 使用file_exists()不简单? :P
  • file_exists 不像 include / require (stackoverflow.com/questions/2672572/…) 那样工作
  • 您能否提供更多有关您要完成的任务的背景信息?通常路由器样式的实现通过 file_exists 检查来解决这个问题,但自动加载器也可能是合适的。
  • @AkhileshBChandran 这意味着使用file_existsinclude。如果可能的话,最好只使用一个函数:D
  • 不要抑制错误。修复代码,使其不会生成它们。

标签: php apache http error-handling


【解决方案1】:

您可以使用stream_resolve_include_path()include 的方式处理文件名,然后使用file_exists 进行检查。所以:

if (file_exists($path) || file_exists(stream_resolve_include_path($path)) {
    include($path);
}

第一个file_exists() 调用是在路径名是绝对路径的情况下,它会覆盖include_path 设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-20
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 2021-01-19
    • 2016-07-04
    • 2017-12-14
    • 2020-02-15
    相关资源
    最近更新 更多