この記事の所要時間: 約 1分33秒
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]
PLAIN TEXT
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にしたいということがあったので、この方法で対処しました。
アプリケーション側のソースは一切変更する必要が無いので楽ですね。まあ開発環境限定ということで。
