Maison > Article > développement back-end > Exemple de php obtenant le code d'état de la demande de page Web
Si une requête est envoyée à votre serveur pour afficher une page sur votre site (par exemple, lorsqu'un utilisateur accède à votre page via un navigateur ou lorsque Googlebot explore la page), le serveur renverra un Code de statut HTTP Répondre aux demandes.
Ce code d'état fournit des informations sur l'état de la demande, informant Googlebot de votre site et de la page demandée.
Certains codes d'état courants sont :
200 – Le serveur a renvoyé avec succès la page Web
404 – La page Web demandée n'existe pas
503 – Le serveur a été chronométré out
Cet article décrit brièvement l'exemple de programme php pour obtenir le statut de la demande de page Web comme suit :
Méthode 1, utilisez fsockopen
Le code est le suivant :
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 est un simple package de la fonction fsockopen. Il est légèrement moins efficace, mais a un taux de réussite de capture élevé, donc je l'utilise généralement. utilisez-le lorsque Snoopy a des problèmes. 5.0.0 ajoute la prise en charge du contexte, il peut également envoyer des informations d'en-tête et personnaliser les agents utilisateurs, les référents et les cookies. 5.1.0 a ajouté les paramètres offset et maxlen pour lire uniquement une partie du fichier.
Méthode 2, utilisez snoopy.class.php
Snoopy est une classe php qui est utilisée pour simuler les fonctions d'un navigateur et peut obtenir du contenu Web et envoyer des formulaires .
$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);
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!