2011-05-22 5 views
5

J'ai besoin d'un script PHP qui lit le code de réponse HTTP pour chaque requête d'URL.PHP get_headers() alternative

quelque chose comme

$headers = get_headers($theURL); 
return substr($headers[0], 9, 3); 

Le problème est la fonction get_headers() est désactivé au niveau du serveur, en tant que policy.So cela ne fonctionne pas.

La question est de savoir comment obtenir le code de réponse HTTP pour une URL?

Répondre

10

Si cURL est activé, vous pouvez l'utiliser pour obtenir l'en-tête tout ou simplement le code de réponse. Le code suivant attribue le code de réponse à la variable $response_code:

$curl = curl_init(); 
curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_URL => 'http://stackoverflow.com')); 
curl_exec($curl); 
$response_code = curl_getinfo($curl, CURLINFO_HTTP_CODE); 
curl_close($curl); 

Pour obtenir l'en-tête tout, vous pouvez émettre une requête HEAD, comme ceci:

$curl = curl_init(); 
curl_setopt_array($curl, array(
    CURLOPT_HEADER => true, 
    CURLOPT_NOBODY => true, 
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_URL => 'http://stackoverflow.com')); 
$headers = explode("\n", curl_exec($curl)); 
curl_close($curl); 
+0

Merci à tous !! L'activation de CURL a fait cette magie !!! –

+0

@Matej Ouais ça marche bien, mais une note simple à ce sujet, je pense que nous n'obtiendrons pas le "serveur" ce qu'ils utilisent comme "Apache ou iis etc.", et quelques autres détails. mais pour vérifier le code de réponse du serveur, cela fonctionne bien. – VKGS

+0

@Sekar: Le 'Server' est optionnel, il dépend du serveur s'il l'envoie ou non. –

3

Vous pouvez générer et lire vos propres requêtes HTTP avec fsockopen et les opérations de fichiers standard. Consultez ma réponse précédente sur ce sujet:

Are there any other options for rest clients besides CURL?

+2

+1, mais s'il a pelotonner disponible qui est probablement plus facile d'écrire et à entretenir que vos propres modèles. –

4

Utilisez HttpRequest si vous le pouvez: http://de2.php.net/manual/en/class.httprequest.php

$request = new HttpRequest("http://www.example.com/"); 
$request->send(); 
echo $request->getResponseCode(); 

Ou le faire à la dure: http://de2.php.net/manual/en/function.fsockopen.php

$errno = 0; 
$errstr = ""; 

$res = fsockopen('www.example.com', 80, $errno, $errstr); 

$request = "GET/HTTP/1.1\r\n"; 
$request .= "Host: www.example.com\r\n"; 
$request .= "Connection: Close\r\n\r\n"; 

fwrite($res, $request); 

$head = ""; 

while(!feof($res)) { 
    $head .= fgets($res); 
} 

$firstLine = reset(explode("\n", $head)); 
$matches = array(); 
preg_match("/[0-9]{3}/", $firstLine, $matches); 
var_dump($matches[0]); 

Curl peut aussi être une bonne option, mais la meilleure option est de battre votre administrateur;)