Version complète: sur le forum Webmaster Hub : Avis sur un code PHP
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
crocxx
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):

CODE
function checkurl($url){
    if(fopen($url,'r')) return true;
    else return false;
}


Merci de m'éclairer wink.gif
Kioob
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
CITATION(Kioob @ vendredi 18 juillet 2008 à 01:01) *
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 wink.gif
pluriels
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.
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.