1

$_POST メソッドを介して送信されるデータの長さと内容が原因で、サーバーが 403 エラー メッセージ (アクセス禁止) を返すことがある PHP スクリプトを作成しました。この 403 エラー メッセージは、サーバーで送信されたデータをフィルタリングする mod_secure ルールが原因で返されます。

PHP でこの 403 エラー メッセージを処理することは可能ですか? たとえば、スクリプトを実行したときにサーバーのステータスをキャッチし、サーバーが 403 ステータス コードを返したときにエラー メッセージを表示します。PHPでこれを行うことは可能ですか?

つまり、リダイレクトを行わずに、PHP スクリプト自体が実行されたときにサーバーが 403 ステータス コードを返した場合に、現在のページにカスタム メッセージを表示したいだけです。

ご協力いただきありがとうございます

4

2 に答える 2

1

Apacheで403エラーのカスタムエラードキュメントを設定し、これをスクリプトにポイントしてエラーを処理します。これを行う方法については、 ErrorDocumentのドキュメントを参照してください。ただし、次のようになります。

ErrorDocument 403 /custom_403_handler.php
于 2012-08-09T05:42:26.743 に答える
0

だから私はあなたのために3つの可能な解決策を持っています.

  1. URL エラーをチェックし、実際の Web ページが指定されていることを確認してください。URL が Web ページではなくディレクトリを指している場合、Web サイトが 403 Forbidden エラーを返す一般的な理由です。これは、PHP の HttpRequest クラスを使用して実行できます。http_getを使用して GET リクエストを実行できます。ここで URL をテストすることもできます。

    <?php
    $response = http_get("URL", array("timeout"=>1), $info);
    print_r($info);
    ?>
    

    出力:

    array (
       'effective_url' => 'URL',
       'response_code' => 403,
       .
       and so on
       )
    

    あなたにとって重要なのは、さらに遊ぶことができる response_code です。

  2. カールの使用。

    function http_response($url)
    { 
        $ch = curl_init(); 
        curl_setopt($ch, CURLOPT_URL, $url); 
        curl_setopt($ch, CURLOPT_HEADER, TRUE); 
        curl_setopt($ch, CURLOPT_NOBODY, TRUE); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
        $head = curl_exec($ch); 
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
        curl_close($ch); 
    
        if(!$head) 
        {  
         return FALSE; 
        } 
    
        return $httpCode;
    }
    
    $errorcode = http_response("URL");    //if success 200 otherwise different
    
  3. アクセスしようとしているページが正しいと確信している場合、403 Forbidden エラー メッセージは誤りである可能性があります。次に、ウェブマスターに連絡するか、独自のカスタマイズされたリダイレクトを使用するかの 2 つのことしかできません。これを行うには、.htaccess ファイルに次の行を追加し、そのエラーを禁じられた.php で処理します。

    ErrorDocument 403 /forbidden.php   
    
于 2012-08-09T06:43:35.300 に答える