PHP 5.4での厳格な標準の無効化


95

私は現在php 5.4でサイトを実行していますが、これより前は5.3.8でサイトを実行していました。残念ながら、PHP 5.4コンバインE_ALLE_STRICT、そのための私の以前の設定があることを意味error_reporting、今は動作しません。以前の値はE_ALL & ~E_NOTICE & ~E_STRICT、一度に1つずつ値を有効にする必要がありますか?

エラーが多すぎて、ファイルに含まれているコードが多すぎて修正できません。


11
アドバイス...コードを修正するか、バグがデバッグしやすくなり、デバッグが難しくなります
Baba

7
s /不幸/幸運
NikiC 2012

96
アドバイスありがとうございます。しかし、jfusion phpbb3プラグイン全体を書き直すために必要な知識が不足しています。とはいえ、お世話になってくれてありがとう。
icomrade

12
私はあなたがerrosを試して修正するべきであるという私たちの友人に同意します、彼らは来てあなたの足首を噛むかもしれません、そしてまたすべてのエラーを隠すことはデバッグするのを難しくします。しかし、私がこの孤独な質問のポスターを判断するのは公平ではないと思います。もしあなたのクライアントが電話であなたの生まれていない子供を悩ませているのであなたが周りに恐ろしい仕事を書く必要がなかったなら、あなたは十分に長い間ITで働いていません
ジョナサンドスサントス2012

7
これは完全に合理的な質問です。そうです、@ icomrade-ここで、あなたは自分の生意気と皮肉について正しいです。これはStackOverflowのあまり魅力的でない特徴の1つです。とは言っても、すべての警告を行うことができない場合でも、受け取る警告の少なくとも一部に取り組むことをお勧めします。
2012

回答:


139

コメンターが述べたように、最善の選択肢はエラーを修正することですが、限られた時間や知識で、それが常に可能であるとは限りません。php.iniの変更

error_reporting = E_ALL

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT

php.iniにアクセスできない場合は、これを.htaccessファイルに含めることができます。

php_value error_reporting 30711

これはE_ALL値(32767)であり、E_STRICT(2048)およびE_NOTICE(8)値を削除しています。

.htaccessファイルにアクセスできない場合、または有効になっていない場合は、ブラウザーの呼び出しから読み込まれるスクリプトのPHPセクションの上部にこれを配置する必要があります。

error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE);

それらの1つは、ソフトウェアを使用できるようにするのに役立ちます。通知と厳格なものは、問題または潜在的な問題の指標ですが、コードの一部がPHP 5.4で正しく機能していない場合があります。


11
私は、PHP 5.4.5と私は上記のすべてを試みたが、私はできなかった無効厳格な通知を使用しています:(他のアイデアを?
KO RO

2
&_E_DEPRECATEDを他の部分と一緒にerror_reporting()に入れてみてください。どのメッセージが表示されていますか?
David Stockton

4
@rokoコードがこれをどこかでオーバーライドしている可能性はありますか?php.iniで無効にした後も引き続き重大なエラーが表示されましたが、Drupalを使用している一部のWebサイトでのみ値がコードに設定されていることに
気付きました

1
@AndrewSpear変だ。理論的には、error_reporting設定は、表示される場所に表示されるエラーに影響を与えるはずです。display_errors設定は、出力(PHPページ内)でエラーが発生するかどうかに影響し、error_logは、エラーがログに書き込まれる場所に影響します。display_errorsがオンの場合、画面にログと同じエラーが表示されるはずです。
David Stockton

4
StackOverflow Smuglord™に変換せずに単純な答えで単純な質問に答えるための+1。
Joshua Pech

2

.htaccess php_valueは、WebサーバーApacheのモジュールとしてPHPサーバーAPIを使用する場合にのみ機能します。IfModule構文を使用します。

# PHP 5, Apache 1 and 2.
<IfModule mod_php5.c>
    php_value error_reporting 30711
</IfModule>

PHPサーバーAPI CGI / FastCGIを使用する場合

ini_set('error_reporting', 30711);

または

error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE);

PHPコード、またはPHP構成ファイルで。php.iniの変更:

error_reporting = E_ALL & ~E_STRICT & ~E_NOTICE

仮想ホスト、サーバーレベル。


1



PHPコードのどこかでerror_reportingを2か所に同時に設定すると、うまくいきました

ini_set('error_reporting', 30711);


と.htaccessファイル

php_value error_reporting 30711

php.iniへのアクセス権なしで機能したものだけが機能し、上記の機能だけでは機能せず、500エラーしか返されませんでした。両方一緒に赤ちゃん!!!
Jamie Hutber、2014

1

E_DEPRACATEDも無効にする必要がある場合は、次を使用します。

php_value error_reporting 22527

私の場合、CMS Made Simpleは「error_reportingでE_STRICTが有効になっている」および「E_DEPRECATEDが有効になっている」と文句を言っていました。その1行を.htaccessに追加すると、両方の設定ミスが解決されました。


0

これを有効にするには、LAMP、Apacheなどを使用して再起動する必要があるかもしれません。これについてしばらく頭を悩ませましたが、おそらくウェブサイトがキャッシュしていたため、サービスが再開されるまで何の影響もないように見えました。


いいえ。これは、ApacheがPHPの設定をリロードする必要があるためです。これは、サービスの開始時にのみ行われるAFAIKです。
svin83 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.