如何用PHP处理403错误

时间:2012-08-09 05:37:17

标签: php http-status-code-403

我已经构建了一个php脚本,由于通过$ _POST方法发送的数据的长度和内容,有时服务器会返回403错误消息(禁止访问)。返回此403错误消息是因为某些mod_secure规则会过滤服务器上发送的数据。

是否可以让PHP处理此403错误消息? 例如,我在运行脚本时捕获服务器状态,然后在服务器返回403状态代码时显示错误消息。 甚至可以在PHP中执行此操作吗?

换句话说,在不进行重定向的情况下,如果服务器在执行PHP脚本本身时返回403状态代码,我只想在当前页面中显示自定义消息。

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

将在Apache中为403错误设置自定义错误文档,并将其指向脚本以处理错误。请参阅ErrorDocument文档,了解如何执行此操作,但这将是以下几点:

ErrorDocument 403 /custom_403_handler.php

答案 1 :(得分:0)

所以我有三种可能的解决方案。

  1. 检查网址错误并确保指定了实际的网页。当URL指向目录而不是网页时,网站返回403 Forbidden错误的常见原因。这可以使用PHP中的HttpRequest类来完成。您可以使用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 Forbidden错误消息可能是错误的。然后你只能做两件事,要么联系网站管理员,要么使用你自己的自定义重定向。为此,在.htaccess文件中添加以下行并在forbidden.php中处理该错误

    ErrorDocument 403 /forbidden.php