Heim  >  Artikel  >  Backend-Entwicklung  >  Beispiel dafür, wie PHP den Statuscode einer Webseitenanforderung abruft

Beispiel dafür, wie PHP den Statuscode einer Webseitenanforderung abruft

怪我咯
怪我咯Original
2017-07-14 15:04:183045Durchsuche

Wenn eine Anfrage an Ihren Server gesendet wird, um eine Seite auf Ihrer Website anzuzeigen (z. B. wenn ein Nutzer über einen Browser auf Ihre Seite zugreift oder wenn der Googlebot die Seite crawlt), gibt der Server einen HTTP-Statuscode zurück Reagieren Sie auf Anfragen.

Dieser Statuscode gibt Auskunft über den Status der Anfrage und informiert den Googlebot über Ihre Website und die angeforderte Seite.

Einige häufige Statuscodes sind:

200 – Der Server hat die Webseite erfolgreich zurückgegeben

404 – Die angeforderte Webseite existiert nicht

503 – Serverzeitgesteuert out

Dieser Artikel beschreibt kurz das Programmbeispiel von PHP, um den Webseitenanforderungsstatus wie folgt zu erhalten:

Methode 1, verwenden Sie fsockopen

Der Code lautet wie folgt:

function get_http_code($url="localhost", $port=80, $fsock_timeout=10){
    set_time_limit(0);
    ignore_user_abort(true);

    // 记录开始时间
    list($usec, $sec) = explode(" ", microtime(true));
    $timer['start'] = (float)$usec + (float)$sec;

    // 校验URL
    if(!preg_match("/^https?:\/\//i", $url)){
        $url = "http://".$url;
    }
    // 支持HTTPS
    if(preg_match("/^https:\/\//i", $url)){
        $port = 443;
    }

    // 解析URL
    $urlinfo = parse_url($url);
    if(empty($urlinfo['path'])){
        $urlinfo['path'] = '/';
    }
    $host = $urlinfo['host'];
    $uri = $urlinfo['path'] . (empty($urlinfo['query'])?'':$urlinfo['query']);

    // 通过fsock打开连接
    if(!$fp = fsockopen($host, $port, $errno, $error, $fsock_timeout)){
        list($usec, $sec) = explode(" ", microtime(true));
        $timer['end'] = (float)$usec + (float)$sec;
        $usetime = (float)$timer['end'] - (float)$timer['start'];

        return array('code'=>-1, 'usetime'=>$usetime);
    }

    // 提交请求
    $status = socket_get_status($fp);
    $out = "GET {$uri} HTTP/1.1\r\n";
    $out .= "Host: {$host}\r\n";
    $out .= "Connection: Close\r\n\r\n";
    $write = fwrite($fp, $out);
    if(!$write){
        list($usec, $sec) = explode(" ", microtime(true));
        $timer['end'] = (float)$usec + (float)$sec;
        $usetime = (float)$timer['end'] - (float)$timer['start'];

        return array('code'=>-2, 'usetime'=>$usetime);
    }

    $ret = fgets($fp, 1024);
    preg_match("/http\/\d\.\d\s(\d+)/i", $ret, $m);
    $code = $m[1];
    fclose($fp);

    list($usec, $sec) = explode(" ", microtime(true));
    $timer['end'] = (float)$usec + (float)$sec;
    $usetime = (float)$timer['end'] - (float)$timer['start'];

    return array('code'=>$code, 'usetime'=>$usetime);
}

file_get_contents ist ein einfaches Paket der fsockopen-Funktion, hat aber eine hohe Erfolgsquote bei der Erfassung, also normalerweise Benutze es, wenn Snoopy Probleme hat. 5.0.0 bietet Unterstützung für Kontext. Außerdem können Header-Informationen gesendet und Benutzeragenten, Verweise und Cookies angepasst werden. 5.1.0 fügte die Parameter offset und maxlen hinzu, um nur einen Teil der Datei zu lesen.

Methode 2, verwenden Sie snoopy.class.php

Snoopy ist eine PHP-Klasse, die zur Simulation der Funktionen eines Browsers verwendet wird und Webinhalte abrufen und Formulare senden kann .

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.jb51.net/');
curl_setopt($ch, CURLOPT_RANGE, '0-500');
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
$writefn = function($ch, $chunk) {
  static $data='';
  static $limit = 500; // 500 bytes, it's only a test
  $len = strlen($data) + strlen($chunk);
  if ($len >= $limit ) {
    $data .= substr($chunk, 0, $limit-strlen($data));
    echo strlen($data) , ' ', $data;
    return -1;
  }
  $data .= $chunk;
  return strlen($chunk);
};
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.jb51.net/');
curl_setopt($ch, CURLOPT_RANGE, '0-500');
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_WRITEFUNCTION, $writefn);
$result = curl_exec($ch);
curl_close($ch);

Das obige ist der detaillierte Inhalt vonBeispiel dafür, wie PHP den Statuscode einer Webseitenanforderung abruft. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn