crocxx Posté 17 Juillet 2008 Posté 17 Juillet 2008 (modifié) Bonjour, Je viens de tomber sur un code source (extrait du script mydir): CODE function checkurl($url){ // vérification du protocole HTTP if (!eregi("^http://", $url)) { return FALSE; } $details = parse_url($url); // vérification du port 80 lié au protocole HTTP if (!isset($details['port'])) { $details['port'] = "80"; } // vérification du chemin if (!isset($details['path'])) { $details['path'] = "/"; } // vérification de l'adresse du serveur if (!ereg("[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+", $details['host'])){ $details['host'] = gethostbyname($details['host']); } // ouverture d'une connexion vers le serveur if ($sock = _AT_fsockopen( $details['host'], $details['port'], $numero_erreur, $texte_erreur)){ $requete = "GET ".$details['path']." HTTP/1.1\r\n"; $requete .= "Host: ".$details['host']."\r\n\r\n"; // envoie d'une requête HTTP GET fputs($sock, $requete); // réception de la réponse du serveur $str = fgets($sock, 1024); while(!ereg('^HTTP/1.1 ', $str)){ $str = fgets($sock, 1024); } // fermeture de la connexion fclose($sock); list($http, $str, $texte) = explode(" ", $str, 3); return TRUE; } return FALSE; } Et j'aimerais savoir ce que cela fait de plus qu'un simple (à part le bug pour les serveurs HTTP1.0 qui bouclent à l'infini et le HTTPS qui retourne faux): function checkurl($url){ if(fopen($url,'r')) return true; else return false;} Merci de m'éclairer Modifié 17 Juillet 2008 par Dudu
Kioob Posté 17 Juillet 2008 Posté 17 Juillet 2008 Hello, le premier cas me semble un peu beaucoup une usine à gaz... et la gestion du protocole HTTP semble bien hasardeuse. Mais l'avantage est que tu peux configurer les entêtes envoyés et gérer un éventuel timeout (ce qui n'est pas fait ici). Autre avantage, ce code n'est pas dépendant du paramètre "allow_url_fopen". Mais un simple file_exists() ne serait il pas plus efficace que ton fopen ? (ce serait probablement une requête HEAD envoyée au serveur plutôt qu'une GET).
crocxx Posté 18 Juillet 2008 Auteur Posté 18 Juillet 2008 Mais un simple file_exists() ne serait il pas plus efficace que ton fopen ? (ce serait probablement une requête HEAD envoyée au serveur plutôt qu'une GET). J'ai penser à file_exists() aussi mais cette fonction me retourné toujours faux avec des url externe et je ne sait pas pourquoi contrairement a fopen. Mais faut que je regarde, parsque ce serai forcément moins lourd de l'utiliser. Merci de m'avoir un peu éclairé sur ce code et sur ses avantages
pluriels Posté 18 Juillet 2008 Posté 18 Juillet 2008 Cela ressemble à une usine à gaz mais peut se justifier : - file_exists ne fonctionne qu'en local je crois - fopen n'est pas disponible sur tous les hébergements. Le script contourne l'utilisation de fopen en ouvrant un socket.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant