Heim > Artikel > Backend-Entwicklung > Beispiel dafür, wie PHP den Statuscode einer Webseitenanforderung abruft
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!