Maison  >  Article  >  développement back-end  >  Exemple de php obtenant le code d'état de la demande de page Web

Exemple de php obtenant le code d'état de la demande de page Web

怪我咯
怪我咯original
2017-07-14 15:04:182977parcourir

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn