1


0

私は私がサイト上で使うことができるエラー処理クラスを書き込もうとしていました。 問題は、アプリケーションのプロファイルを作成するときに、error_log関数が原因で発生していることです。 これが私のコードです(クラスを省略して:

クラスErrorHandler {private static $ instance;プライベートの静的$ mail。プライベート関数__clone(){}

プライベート関数__construct(){error_reporting(E_ALL | E_STRICT);

if(!defined( 'ENV')){if($ _ SERVER ['SERVER_ADDR'] == '127.0.0.1' || $ _SERVER ['SERVER_NAME'] == 'localhost'){#echo "ローカル環境"; DEFINE( 'ENV'、 'LOCAL'); ini_set( 'display_errors'、1); } else {#echo "ライブ環境"; DEFINE( 'ENV'、 'LIVE'); ini_set( 'display_errors'、0);パブリック関数setErrorConfig($ error_level、$ mail = ''、$ mode = 'production'){error_reporting($ error_level);} switch($ mode){case 'development':ini_set( 'display_errors'、 '1');ブレーク;

'production'の場合:ini_set( 'display_errors'、 '0'); if($ mail!= ''){self :: $ mail = $ mail; set_error_handler(array( 'ErrorHandler'、 'handleError'));破る;

デフォルト:ini_set( 'display_errors'、 '0'); error_reporting(E_ERROR);ブレーク; }}

パブリック関数handleError($ e_num、$ e_msg、$ e_file、$ e_line、$ e_vars){$ headers = 'MIME-Version:1.0'。 "\ r \ n"; $ headers。= 'コンテンツタイプ:text / html; charset = iso-8859-1 '。 "\ r \ n"; $ headers。= 'From:DC_Researchサイト'。 "\ r \ n";

$ msg = ''; $ msg。= ''; $ msg。= 'h2 {font-family:verdana;}'; $ msg。= 'エラーの説明:'; $ msg。= 'スクリプト:'。$ e_file。 ''; $ msg。= '行:'。$ e_line。 ''; $ msg。= 'メッセージ:'。$ e_msg。 ''; $ msg。= '変数:'。$ e_vars。 ''; $ msg。= '';

#mail(self :: $ mail、 'エラー報告'、$ msg、$ headers); error_log($ msg、1、self :: $ mail、$ヘッダ); }}

何がそれを殺しているのか私がわかるのを手伝ってもらえますか?

3 Answer


3


定義上、メールの送信は(たぶんSMTPサーバーと連絡を取る必要があるため)高価な操作であるため、プログラムをプロファイルすると、error_logで費やされる時間は、プログラムの他の行で費やされる時間と比較して膨大になります。


3


エラー情報をデータベースに保存してから、cronスクリプトでその内容をEメールで送信することができます。 私は、DBに保存するほうが、Eメールを送信するよりもユーザーにとって速いと思います。


0


私はついにこの問題を解決しました - 私の悪いことです。 エラーハンドラをメールに記録するように設定しようとすると、スクリプトはローカル設定に追いつくだけになります - それはメールサーバを見つけることができないからです(私は思う)。 場所を検出する条件でメソッド呼び出しをラップすると、問題は解決します。