从RHEL 5x升级到CentOS 6x后,我开始在httpd日志中看到这些错误:
PHP严格标准:不应该是非静态方法PEAR :: isError() 在第33行的/web/sites/blah/somescript.php中静态调用
我看到了MDB2的类似错误。更多关于这一点。
somescript.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
添加到error reporting。重新启动httpd以加载新配置。仍然收到这些错误消息。
其他人提到了与MDB2相同的问题,因此我将这些包更新为beta releases。这似乎解决了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()
不会产生错误?
答案 0 :(得分:14)
我害怕@johannes不正确 - 这是非常可行的。只需在您的食谱中替换它:
if ((new PEAR)->isError($mdb2_dbx)) {
// Victory! Er, I mean, Error!
...
}
答案 1 :(得分:5)
值得注意的是,如果您要更新自己的代码,则使用一个参数调用PEAR::isError($obj)
等同于is_a($obj, 'PEAR_Error')
。我知道这样的“解包”库方法不是最好的做法,但它基本上只是一个“检查实例”。
答案 2 :(得分:3)
不,没有。 PEAR::isError
是PHP遗留的4倍。
如果更改php.ini
中的错误级别是不够的,您应该检查
如果所有这些都没有帮助,请在运行时使用error_level()
函数设置适当的级别,或者如果没有其他帮助,请使用@
运算符来抑制错误。应该避免使用@
因为它相对“慢”(错误报告总是很慢......)并且它可能隐藏其他错误。
长期建议是使用更多现代化的图书馆。