9

サイトで内部サーバー エラーが発生したときに情報を収集しようとしています。適切なエラー ログが設定されていない多くのアプリケーションがあり、問題が発生した場合、クライアントは作業に最適な情報を提供してくれません。私がやりたいことは、500 が発生したときに、次のような問題が発生した場所に関するデータを収集したいということです。

  • ユーザーがいたページ
  • ページに関連付けられたデータ ($_GET、$_POST など)

サーバー (IIS 7) に次の構成でカスタム エラー ページを設定しました。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <httpErrors errorMode="Custom">
            <remove statusCode="500" />
            <error statusCode="500" path="/error.php?code=500" responseMode="ExecuteURL" />
        </httpErrors>
    </system.webServer>
</configuration>

そして、そのページで、$_POST と $_GET を var_dump-ing して、それらの何かがエラー ページに到達するかどうかを確認していますが、そうではありません。500エラーに対する私の目標は次のとおりです。

  • エラー発生時のページ/ユーザーに関するデータを収集する
  • 収集したデータを含む問題についてサポート チームにメールを送信する

そのデータを収集してカスタム エラー ページに表示させる方法はありますか?

エラー.php:

switch($ErrorCode){
    case '500':
         var_dump($_REQUEST, $_POST, $_GET);
         echo "internal server error";
         break;
}

このエラーを取得するためにフォームを送信したにもかかわらず、すべての場合で $_POST は空であり、$_GET にはこれが含まれています (これは理にかなっています)。

array(2) {
  ["code"]=>
  string(3) "500"
  ["500;http://icom-sbs/test_php"]=>
  string(0) ""
}

4/19更新

私はいくつかのアイデアを試しましたが、主なアイデアはセッション変数に有用なデータを保存することでした。エラーが発生するテスト ページのセッション変数にいくつかのフォーム データを保存しようとしましたが、セッションに入ることはありません。サーバーはページでエラーが発生することを検出したように見えるため、ページでコードを実行することさえなく、すぐにエラーページを実行します。

4

4 に答える 4

2

500 内部エラーが発生したときに php が初期化されない可能性があるため、php レベルではなくサーバー レベルで詳細を記録する必要があると思います。Apacheを使用している場合は、チェックアウトできます

http://httpd.apache.org/docs/1.3/mod/mod_log_config.html#logformat

エラー ログには、リクエスト URL、リモート アドレス、get パラメータ (クエリ文字列) が確実に示されます。しかし、投稿データについてはわかりません。ログ形式を変更して、ヘッダー全体と生データを特定のレベルでダンプできる場合があります。

しかし、サーバーが実際にあきらめてphpが起動しない特定の時点で、phpレベルでのロギングがスキップされると確信しています...

于 2013-04-26T07:12:28.937 に答える
0

$_SERVER関心のあるものがある場合は、配列を確認してください。

少し調べたところ、ASP を使用している場合は、Server.GetLastErrorでエラーの詳細を取得できるため、IIS が$_SERVER配列を介して情報を渡す可能性があると思われます。

于 2013-04-19T07:20:12.403 に答える