2012-08-09 148 views
0

我已經建立了一個PHP腳本,有時可能會由於通過$ _POST方法發送的數據的長度和內容服務器返回403錯誤消息(禁止訪問)。由於某些mod_secure規則會過濾服務器上發送的數據,因此會返回此403錯誤消息。如何處理與PHP的403錯誤

是否有可能讓PHP處理這個403錯誤信息? 例如,我會在運行腳本時捕獲服務器狀態,然後在服務器返回403狀態碼時顯示錯誤消息。 這甚至有可能在PHP中做到這一點?

換句話說,如果服務器在PHP腳本本身執行時返回403狀態碼,我只想在當前頁面顯示自定義消息。

感謝您的幫助

+0

你的意思是錯誤,您想自定義錯誤頁?如果是,則可以使用.httaccess重定向方法。在.htaccess文件中添加ErrorDocument 403 /forbidden.php並保存。 – Vinay 2012-08-09 05:41:15

+0

不是。如果服務器在PHP腳本本身執行時返回一個403狀態碼,那麼在不進行重定向的情況下,我只想在當前頁面顯示一條自定義消息。謝謝 – Vincent 2012-08-09 05:43:52

回答

1

這將是建立在Apache的403錯誤自定義錯誤文檔,這點在腳本來處理錯誤。請參閱有關如何做到這一點的ErrorDocument文檔,但它會沿着這些路線的東西:

ErrorDocument 403 /custom_403_handler.php 
+0

如果服務器在PHP腳本本身執行時返回403狀態碼,我不想重定向,我只想在當前頁面顯示一條自定義消息。謝謝 – Vincent 2012-08-09 05:47:14

+0

發佈您的代碼。你已經寫入加載頁面 – Rab 2012-08-09 05:49:45

+0

這是一個很長的。基本上,它是一個包含html數據的json字符串。在某些mod_secure激活的服務器上,字符串包含html的簡單事實會導致與其中一個mode_secure規則發生衝突,然後服務器返回403禁止訪問頁面。此外,數據通過jQuery ajax調用發送,所以如果服務器返回403錯誤,用戶認爲ajax調用永遠加載,而它只是服務器不返回任何內容。從那裏,我會檢查服務器使用PHP返回的狀態代碼,或者檢查mod_secure是否被激活。 – Vincent 2012-08-09 05:55:17

0

所以,我對你有三種可能的解決方案。

  1. 檢查URL錯誤並確保指定了實際的網頁。當URL指向一個目錄而不是網頁時,網站返回403 Forbidden錯誤的常見原因。可以在PHP中使用HttpRequest Class來完成。您可以使用http_get來執行GET請求。你也可以Test URL here

    <?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禁止錯誤消息可能是一個錯誤。那麼你只能做兩件事情,或者聯繫網站管理員或使用自己的自定義重定向。要做到在.htaccess文件中添加以下行並處理forbidden.php

    ErrorDocument 403 /forbidden.php 
    
+0

致命錯誤:調用未定義的函數http_get() – Nate 2014-06-25 22:14:57

+0

@Nate http_get()函數是part [PECL擴展](http://php.net/manual/en/book.http.php),你必須[安裝](http://php.net/manual/en/http.install.php )明確。 – Vinay 2014-06-26 04:59:31