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
_を エラー報告 に追加することです。新しい構成を読み込むためにhttpdを再起動しました。これらのエラーメッセージが引き続き表示されます。
他の人もMDB2で同じ問題を指摘したので、これらのパッケージを ベータリリース に更新しました。これは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()
を呼び出す別の方法はありますか?
いいえ、ありません。 _PEAR::isError
_は、PHP 4回のレガシーです。
_php.ini
_のエラーレベルを変更するだけでは不十分な場合は、確認する必要があります
それでも解決しない場合は、実行時にerror_level()
関数を使用して適切なレベルを設定するか、それ以外の方法で解決できない場合は、_@
_演算子を使用してエラーを抑制します。 _@
_は比較的 "遅い"(エラー報告はいずれにしても遅い...)ため、他のエラーを隠す可能性があるため、使用は避けてください。
長期的な提案としては、より近代的なライブラリを使用することです。
@johannesが間違っていると思います-これは非常に可能です。これをあなたのレシピで単に置き換えてください:
if ((new PEAR)->isError($mdb2_dbx)) {
// Victory! Er, I mean, Error!
...
}
独自のコードを更新する場合、PEAR::isError($obj)
を1つの引数で呼び出すことはis_a($obj, 'PEAR_Error')
と同等であることは注目に値します。そのようなライブラリメソッドを「アンラップ」することはベストプラクティスではないことは知っていますが、基本的にはチェックの「インスタンス」にすぎません。