PHP-php 检测一个页面是否404错误的方法

小组聊天灌水 小组聊天灌水 主题:993 回复:2175

PHP-php 检测一个页面是否404错误的方法

夜无邪 发布于 2017-10-17 字数 101 浏览 1012 回复 5

在做抓取页面程序里,我想先判断url是否是404错误,如果是就跳过。用php如何检测某个页面是404错误?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(5

想挽留 2017-10-25 5 楼

直接使用 php 的 get_headers() 函数:

$headers = get_headers('https://www.wenjiangs.com');
echo "<pre>";
print_r($headers);
//输出结果:
Array
(
  [0] => HTTP/1.1 404 Not Found
  [1] => Server: nginx/0.7.67
  [2] => Date: Wed, 01 Aug 2012 16:46:40 GMT
  [3] => Content-Type: text/html; charset=UTF-8
  [4] => Connection: close
  [5] => Vary: Accept-Encoding
  [6] => X-Powered-By: PHP/5.2.13
)

或者使用 fsockopen():

$url = "https://www.wenjiangs.com";

$info = parse_url($url); $fp = fsockopen($info['host'], 80,$errno, $errstr, 30); fputs($fp,"GET {$info['path']} HTTP/1.1rn"); fputs($fp, "Host: {$info['host']}rn"); fputs($fp, "Connection: closernrn"); $headers = array(); while(!feof($fp)) { $line = fgets($fp); if($line != "rn") { $headers[] = $line; }else { break; } } echo "<pre>"; print_r($headers); //输出为: Array ( [0] => HTTP/1.1 404 Not Found [1] => Server: nginx/0.7.67 [2] => Date: Wed, 01 Aug 2012 16:51:57 GMT [3] => Content-Type: text/html; charset=UTF-8 [4] => Transfer-Encoding: chunked [5] => Connection: close [6] => Vary: Accept-Encoding [7] => X-Powered-By: PHP/5.2.13 )

甜柠檬 2017-10-24 4 楼

 $handle = curl_init($url);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, TRUE);

$response = curl_exec($handle);

$httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
if($httpCode == 404) {
/ Handle 404 here. /
}

curl_close($handle);

甜柠檬 2017-10-21 3 楼

用curl模拟访问,可以得到比较详细的信息,请求状态什么的还有cookie等都可以获取,如果不子解可以查找相关资料看一看,“龙觉忠”说的这种方法就可以

偏爱自由 2017-10-19 2 楼

404页面,大家返回的状态码不大一致,通常我们检测状态码是不是404就可以了,上面的答案已经给出了。但是很多站的404都是返回一个404页面,状态码为200或者其他。这种情况就需要curl模拟访问,然后做文本判断。

归属感 2017-10-17 1 楼

给你一个获取url的HTTP头信息的函数
如果是404返回如下
Array
(
[HTTP/1.1 404 Not Found] =>
[Date] => Wed, 01 Aug 2012 12
[Server] => Apache/2.2.6 (Win32) PHP/5.2.5 DAV/2
[Content-Type] => text/html; charset=iso-8859-1
)

 /**

  • PublicAction::getHttpHead()
  • 获取HTTP头信息
  • @param string $url URL地址
  • @param bool $isFormat 是否格式化输出
  • @return array
    */
    function getHttpHead($url, $isFormat = false)
    {
    $ch = curl_init();
    $options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => true,
    CURLOPT_NOBODY => true,
    CURLOPT_RETURNTRANSFER => true,
    );
    curl_setopt_array($ch, $options);
    $result = curl_exec($ch);
    curl_close($ch);
    $tmpArr = explode("n", $result);
    $resultArr = array();
    foreach ($tmpArr as $value) {
    $value = trim($value);
    if ($value != '') {
    if ($isFormat == true) {
    $arr = explode(':', $value);
    $k = $arr[0];
    $v = $arr[1];
    $resultArr[$k] = $v;
    } else {
    array_push($resultArr, $value);
    }
    }
    }
    return $resultArr;
    }