【问题标题】:PHP Script stops processing on a warning error?PHP脚本停止处理警告错误?
【发布时间】:2010-12-20 15:12:59
【问题描述】:

我有一个 PHP 脚本,它在 PHP 警告时停止处理(似乎是)。错误是一般的“PHP警告:fopen”-“无法打开流:没有这样的文件或目录”。

PHP 应该停在这里吗?我只考虑致命错误?

有没有办法让它继续?

【问题讨论】:

  • 您是否检查过您的 php 版本是否真的因警告而退出?尝试只包含 <?php fopen('doesnotexist', 'rb'); echo 'if you can read this...'; 的新脚本
  • OP 是正确的,PHP 不会因报告或显示的警告而停止。除了使用特殊处理程序之外,唯一的配置是使用 Xdebug,请参阅stackoverflow.com/questions/10520390/…,我知道可以做到这一点。如果您安装了 xdebug 模块并且xdebug.halt_level 包含E_WARNING,那么 PHP 将在系统警告时停止。当然,我们想删除警告,但系统仍然不应该停止它们,除非我们想要这样做。所以,答案是 OP 应该检查他的配置设置。
  • 我在全新安装时遇到了同样的问题; PHP 对脚本进行预处理,当它遇到通知时,它将它们转储到输出缓冲区,但显然不执行任何代码?

标签: php error-handling


【解决方案1】:

不知道如何继续处理错误,但最好的办法是首先防止错误:

http://php.net/manual/en/function.file-exists.php

http://www.php.net/manual/en/function.is-readable.php

【讨论】:

  • is_readableis_writable 在 Windows 系统上被严重破坏,我认为在带有 ACL 的 *nix 上也是如此。
【解决方案2】:

发出警告,但脚本继续执行。您的脚本停止这一事实更有可能与您之后尝试执行的处理有关,但与警告本身无关。

之前使用 file_exists 和 is_readable 的建议不错。

【讨论】:

  • 也可以是特殊的配置设置。请参阅我对问题的评论。
【解决方案3】:

As noted on the php documentation page,

如果打开失败,则会产生 E_WARNING 级别的错误。您可以使用 @ 来抑制此警告。

【讨论】:

    【解决方案4】:

    是的,如果error_reporting() 级别足够低,则应该这样做。

    是的,有。在fopen 之前添加“@”会导致警告,如下所示:@fopen(...)

    【讨论】:

      【解决方案5】:

      除了 Conrad Meyer 在 PHP 手册中提到的内容:

      $fres = @fopen('file.ext','w+');
      if($fres){
        // so anything you want with the file
      }
      

      fopen 出错时返回 false。当 fopen 有一个错误被抑制并且你没有使用 if($fres) 时,后续的文件操作函数会抛出错误,说 $fres 不是一个有效的文件句柄。

      【讨论】:

        【解决方案6】:

        即使继续进行,该程序也很可能无法按预期方式运行。无论如何,尝试处理异常:

        try {
            # code that may cause an error
        }
        catch( Exception $e ) {
            # do error handling mechanism
        }
        

        【讨论】:

        • 实际上脚本应该继续运行,没有那个文件也可以——我还没有写好,但如果找不到某些文件,我只想让它继续
        猜你喜欢
        • 1970-01-01
        • 2017-08-15
        • 1970-01-01
        • 2015-06-01
        • 2010-09-30
        • 1970-01-01
        • 2014-03-01
        • 2011-08-29
        • 2019-11-28
        相关资源
        最近更新 更多