11

从 RHEL 5x 升级到 CentOS 6x 后,我开始在我的 httpd 日志中看到以下错误:

PHP 严格标准:非静态方法 PEAR::isError() 不应在第 33 行的 /web/sites/blah/somescript.php 中静态调用

我看到了 MDB2 的类似错误。稍后会详细介绍。

一些脚本.php:

32  $mdb2_dbx = MDB2::factory($dsn_mdb2, $mdb2_options);
33  if (PEAR::isError($mdb2_dbx))
34  {
35      $err = '<p>Cannot connect to database: ' . $mdb2_dbx->getMessage();
36      errorHandler($err);
37  }   

我做的第一件事是编辑/etc/php.ini并添加& ~E_STRICT错误报告中。重新启动 httpd 以加载新配置。仍然收到这些错误消息。

其他人提到了与 MDB2 相同的问题,所以我将这些包更新为beta 版本。这似乎解决了 MDB2 错误,但我仍然在 httpd 日志文件中收到 PEAR 错误消息。

系统信息:

# pear list
PEAR               1.9.4   stable
MDB2               2.5.0b5 beta
MDB2_Driver_mysql  1.5.0b4 beta
MDB2_Driver_mysqli 1.5.0b4 beta

# php --version
PHP 5.4.20 (cli) (built: Sep 18 2013 19:55:33) 

# cat /etc/centos-release 
CentOS release 6.4 (Final)

# apachectl -v
Server version: Apache/2.2.15 (Unix)

问题

是否有不同的调用方式PEAR::isError()不会产生错误?

4

3 回答 3

16

恐怕@johannes 不正确 - 这是非常可行的。只需在你的食谱中替换这个:

if ((new PEAR)->isError($mdb2_dbx)) {
    // Victory! Er, I mean, Error!
    ...
}
于 2015-01-22T21:45:26.237 回答
5

可能值得注意的是,如果您要更新自己的代码,则PEAR::isError($obj)使用一个参数进行调用等效于。is_a($obj, 'PEAR_Error')我知道“解包”这样的库方法并不是最佳实践,但它基本上只是一个“实例”检查。

于 2015-04-11T09:55:27.447 回答
3

不,没有。PEAR::isError是 PHP 的 4 倍。

如果更改错误级别php.ini还不够,您应该检查

  • 是否有另一个 php.ini 文件正在加载(通过 Apache 检查 phpinfo() 输出)
  • 一些脚本设置错误级别。

如果所有这些都没有帮助,请在运行时使用该函数设置适当的级别error_level(),或者如果没有其他帮助,请使用运算符抑制错误@@应该避免使用,因为它相对“慢”(错误报告无论如何都很慢......)并且它可能会隐藏其他错误。

长期的建议是使用更现代的图书馆。

于 2013-10-08T13:11:54.920 回答