1

ではphp.ini、私のエラー表示設定は次のとおりです。

error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
display_errors  = Off

これは通常呼び出されるファイルに対しては機能しますが、ファイルが jQuery/AJAX を使用して呼び出されると、次のようなエラーが表示されます。

厳格な基準: 664 行目の /usr/lib/php/XML/Util.php の互換性のないコンテキストからの $this を想定して、非静的メソッド XML_Util::replaceEntities() を静的に呼び出すべきではありません

厳格な基準: 非静的メソッド XML_Util::createTagFromArray() を静的に呼び出すべきではありません。これは、1231 行目の /home/site/public_html/site/paypal/lib/Serializer/Serializer.php の互換性のないコンテキストから $this を想定するためです。

厳格な基準: 非静的メソッド XML_Util::attributesToString() は、652 行目の /usr/lib/php/XML/Util.php の互換性のないコンテキストから $this を想定して、静的に呼び出すべきではありません

推測できるように、これは私のウェブサイトの一部を破壊しています。これを修正するにはどうすればよいですか?

PHP 5.4.10 を実行しています

ファイルは Jquery 関数を使用して呼び出されています:$.getまたは$.post

4

1 に答える 1

1

使用しているコード/ライブラリが、厳格な標準エラー/通知/警告をトリガーしています。

E_STRICTそれに関連するエラー報告定数はDocsと呼ばれ、PHP 5.0 Docsで導入されました。

PHP 5.4E_STRICTは の一部でE_ALLあるため、次のように構成する場合は PHP 5.4 も削除する必要があります。

error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT
                                                    ^^^^^^^^^^^

したがってE_STRICT、本番環境のエラー設定から除外すると、これらのStrict Standardsエラーはログに記録されなくなります。おそらく、以前のバージョンの PHP 5.3 で発生していたようなものです。

さらに、ライブラリのベンダーに連絡して、コードにE_STRICT互換性を持たせるように依頼する必要があります。これは良い習慣であり、一部のコードには特定の品質があることも示しています。

開発では、厳密な標準エラーE_STRICTの原因となっている場所を修正して、コードに同等の互換性を持たせる必要があります。

E_NOTICEおよびにも同じことが当てはまりE_DEPRECATEDます。開発環境でこれらのメッセージを有効にして、報告されたすべての問題を修正する必要があります。これにより、簡単にバグが増えるのを防ぐことができます。

からphp.ini:

;;;;;;;;;;;;;;;;;;;
; Quick Reference ;
;;;;;;;;;;;;;;;;;;;
; The following are all the settings which are different in either the production
; or development versions of the INIs with respect to PHP's default behavior.
; Please see the actual settings later in the document for more details as to why
; we recommend these changes in PHP's behavior.

...

; error_reporting
;   Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
;   Development Value: E_ALL
;   Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT

ログに記録されずに出力されたエラー メッセージが表示される理由は、質問で提供した情報からは明らかではありません。これには複数の理由が考えられますが、

  • エラーの表示を適切に無効にしていないか、ランタイムで再度有効にしていないため、最も簡単です(その設定はPHPコード内からも変更できます)。
  • エラー表示無効になっていますが、とにかくそれらを表示しているいくつかのエラーハンドラーDocsがあります。

したがって、エラーレベルの設定とは別に、質問のこの部分では、エラーメッセージが表示される理由を見つけるために、側でさらにトラブルシューティングを行う必要があります.


関連項目:

于 2013-01-05T13:44:21.510 に答える