なにやらPHP5.3以降でエラーレベルが増えたそうな・・・・
前回は
バージョン違いのPHP はエラーを吐いて邪魔をするw というブログを書いた気がw
そのときは
「
Strict Standards: Non-static method 」の後に何か続く物で、
エラーレベルが問題でphp.ini で、
[変更前]
error_reporting = E_ALL | E_STRICT
[変更後]
error_reporting = E_ALL
です。
つまり、<E_STRICT>をカットするとエラーメッセージでの情報は出なくなったと書きました・・・
しかし!甘かった様です。
元々<E_ALL> は全てのエラーを表示するものを意味していると公式のサイトの
定義済み定数 では
書いてあり、それと同時に全てとはありますが、<E_STRICT> とは別と書いてあり、
前回の「
Strict Standards」のエラーは
<E_STRICT>(コードの相互運用性や互換性を維持するために PHP がコードの変更を提案する。PHP5より)
が原因のエラーであった為、<E_ALL> と重ならない為にエラーが表示されない状況を
簡単に作ることが出来ました。
しかし、今回のエラーの
「
Deprecated: Assigning the return value of new by reference is deprecated in」で続くエラー
つまり「
Deprecated」のエラーは、PHP5.3 からあるエラーレベル、
<E_DEPRECATED>と<E_USER_DEPRECATED>のどちらかに引っかかる様なのです。
私は英語は出来る人ではありませんがw
とりあえず、「
Deprecated: Assigning the return value of new by reference is deprecated in」の中に
「
return value of new by reference」と言う言葉があり、これはたぶん間違えなく、
公式サイトのマニュアルにある
PHP 5.3.x で推奨されない機能 の
推奨されない機能>>
new の返り値を参照で代入すること <<
まさにコレ!なのだと思います。
なので結論から入ると、PHP5.3 のエラーレベルによって出てしまう邪魔なエラーは
E_ALL をやめて、ばらばらなエラーを結合して使うしかなさそうです。
また、公式の
定義済み定数 を見た方が明確なのですが、バージョンの部分や詳細説明を省いて簡単にして
書いていました。
1 E_ERROR 重大な実行時エラー。
2 E_WARNING 実行時の警告 (致命的なエラーではない)。
4 E_PARSE コンパイル時のパースエラー。
8 E_NOTICE 実行時の警告。
16 E_CORE_ERROR PHPの初期始動時点での致命的なエラー。
32 E_CORE_WARNING (致命的ではない)警告
64 E_COMPILE_ERROR コンパイル時の致命的なエラー。
128 E_COMPILE_WARNING コンパイル時の警告(致命的ではない)。
256 E_USER_ERROR ユーザーによって発行されるエラーメッセージ。
512 E_USER_WARNING ユーザーによって発行される警告メッセージ。
1024 E_USER_NOTICE ユーザーによって発行される注意メッセージ。
2048 E_STRICT コードの相互運用性や互換性を維持するために PHP がコードの変更を提案する。
4096 E_RECOVERABLE_ERROR キャッチできる致命的なエラー。
8192 E_DEPRECATED 実行時の注意。
16384 E_USER_DEPRECATED ユーザ定義の警告メッセージ。
30719 E_ALL サポートされる全てのエラーと警告。
ここからPHP5.3 のエラー以外をE_ALL から出してみるという手を使うなら、
E_STRICT は任意(多分これをしている人には必要ないと思うが)で
追加するかどうか決めれば良いがそれ以外はですね・・・
つまり・・・wwwwwwwwwww
php.ini の設定にですね・・・・・
error_reporting = 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_USER_DEPRECATED
っていう御馬鹿な設定をすれば私好みにきっとなる
ハズだ!と思っていますw
とりあえずまだやっていませんが、あまりにも眠いのに・・・ 眠いのに・・・ 書いたメモなので
コレぐらいで簡便してやろう!(して下さいw)
まぁこのブログに追伸などがなければ設定がOKだったか飽きたと思って下さいorz
セキュリティーなどの為にバージョンは上げる事をうたい文句としている様な雰囲気が
PHP に見られるが、バージョンによってエラーレベルが増えて、
エラーレベルは結局調べないといけなくなるので、
結局人それぞれ自身が使うライブラリや、自分の書いたプログラムに
合わせて全てオプション設定を書いた方が良いと思いました。
以上。
追伸
error_reporting = 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_USER_DEPRECATED
で
PHP5.3 のエラーは出ない様になりましたー!確認済み
それはそうでしょう。PHP5.3 のエラーと<E_STRICT>を取り除いた物なので
うまく行ったのでしょう。
大体PHPのマニュアルがあってもなかなかしない、もしくはしたくない、したくなくなる様な
オプションの量ですよね^^;
後ですが、
このやたら長い書き方以外にも
error_reporting=E_ALL&~(E_NOTICE|E_DEPRECATED)
でE_ALL からPHP5.3 の<E_NOTICE><E_DEPRECATED>を使わないで済むのがわかりました。
php.ini の設定でも書式が使えるとは思ってませんでした。
良く考えたら「 | 」も書式でした、なんだかまだまだ覚える事はいっぱいありそうです。
追伸終わり
コメント一覧