PHP5.3+古いCakePHPで表示される大量のDeprecatedを抑制する方法です。
これはPHP5.3からE_ALLにE_DEPRECATEDが含まれたためで、非推奨な関数や文法を使っているとDeprecatedエラーが表示されます。
Deprecated表示を抑制する一番単純なのは、error_reporting設定でE_ALLからE_DEPRECATEDを外す方法です。
error_reporting = E_ALL & ~E_DEPRECATED
CakePHPでもデバッグレベルが0であれば、この方法で回避可能です。
しかし開発環境でデバッグレベルを1以上にしていると、フレームワークがerror_reportingをE_ALLに上書きしてしまうため、Deprecatedが表示されてしまいます。
E_ALLを設定している箇所を書き換える方法もありなのですが、開発環境にある複数のプロジェクトについて書き換えていくのも中々骨の折れる作業です。
ということで、CakePHP側のソースは書き換えずにDeprecated表示を抑制する方法を考えてみました。
E_ALLからE_DEPRECATEDを外す
方法は単純。PHP自体のソースを変更してE_ALLからE_DEPRECATEDを外すだけです。
変更箇所は1箇所だけ。
[Zend/zend_errors.h]
— zend_errors.h.org 2010-09-23 18:10:00.000000000 +0900
+++ zend_errors.h 2010-09-23 17:05:30.000000000 +0900
@@ -38,7 +38,7 @@
#define E_DEPRECATED (1<<13L)
#define E_USER_DEPRECATED (1<<14L)
-#define E_ALL (E_ERROR | E_WARNING | E_PARSE | E_NOTICE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING | E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE | E_RECOVERABLE_ERROR | E_DEPRECATED | E_USER_DEPRECATED)
+#define E_ALL (E_ERROR | E_WARNING | E_PARSE | E_NOTICE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING | E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE | E_RECOVERABLE_ERROR | E_USER_DEPRECATED)
#define E_CORE (E_CORE_ERROR | E_CORE_WARNING)
#endif /* ZEND_ERRORS_H */
[/code]
あとは通常どおりPHPをビルドしてインストールすればokです。
変更前後でE_ALLの値は以下のように変わります。
変更前(オリジナル) % php -r 'var_dump(E_ALL);' int(30719) 変更後 % php -r 'var_dump(E_ALL);' int(22527)
これでerror_reportingにE_ALLが設定されても、Deprecatedは表示されません。
とりあえずですが
本来はDeprecatedな原因を取り除くことが一番なのですが、本番環境はPHP5.2や5.1で、開発環境はPHP5.3にしたいということがあったので、この方法で対処しました。
アプリケーション側のソースは一切変更する必要が無いので楽ですね。まあ開発環境限定ということで。
- Newer: Lithiumのフィルタシステム
- Older: Twitter で使える8つのコマンド
トラックバック:3
- このエントリーのトラックバックURL
- /blog/2010/09/restraint_deprecated_message_on_cakephp_and_php53.html/trackback
- Listed below are links to weblogs that reference
- PHP5.3+古いCakePHPのDeprecated表示をPHPコードを書き換えずに抑制する from Shin x blog
- pingback from CakePHP : CakePHP1.2 を PHP5.3 で動かした際に出たエラーの対処方法 | ゆる~くWebのこと 11-12-28 (水) 19:10
-
[…] Deprecated エラーが表示されるようになったために起こるエラーのようです(こちら参照)。 […]
- pingback from PHPエラーメモ | MOT:主にプログラム勉強メモ部屋 15-01-11 (日) 23:19
-
[…] ことはない) PHP5.3+古いCakePHPのDeprecated表示をPHPコードを書き換えずに抑制する – Shin x blog […]
- pingback from PHPエラーメモ | MOT:主にプログラム勉強メモ部屋 15-01-11 (日) 23:19
-
[…] ことはない) PHP5.3+古いCakePHPのDeprecated表示をPHPコードを書き換えずに抑制する – Shin x blog […]