2011-09-04 4 views
0

Je dois vérifier si les fichiers distants sont en ligne et qu'ils n'ont pas changé. Le problème est que ces fichiers sont gros, donc je veux lire l'en-tête http seulement et puis abandonner la demande. Le résultat serait basé sur le code d'état de réponse et le champ de longueur de contenu.Comment envoyer une requête HTTP incomplète de PHP?

Comment puis-je le faire en PHP?

+0

double possible de [vérifier si une URL existe en PHP] (http://stackoverflow.com/questions/2280394/check-if-an -url-existe-en-php) – Gordon

+0

plus http://stackoverflow.com/search?q=check+if+link+exists+php – Gordon

Répondre

5

Vous pouvez utiliser la fonction get_headers().

Si vous préférez cURL, vous pouvez utiliser CURLOPT_NOBODY:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HEADER, TRUE); 
curl_setopt($ch, CURLOPT_NOBODY, TRUE); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 

$headers = curl_exec($ch); 
+0

Merci, c'est exactement ce que je cherchais. – NeDark

+3

Il existe des différences subtiles (mais potentiellement importantes) entre ces deux méthodes. 'get_headers()' envoie une requête GET normale et détruit la connexion dès que la tête a été reçue. cURL avec '... NOBODY' envoie une requête HEAD. La méthode cURL est légèrement plus rapide, mais peut également renvoyer une image incomplète/incorrecte, en fonction de l'objet que vous demandez et du serveur à partir duquel vous le demandez. Aucun de ceux-ci ne vous permettra de traiter autre chose qu'une requête GET et de retourner juste la tête (HEAD est supposé simuler un GET). – DaveRandom

+0

Exemple cURL ne fonctionnait pas, j'ai découvert que 'curl_setopt ($ ch, CURLOPT_HEADER, TRUE); 'manquait. – NeDark

Questions connexes