Aller au contenu

Avis sur un code PHP


Sujets conseillés

Posté (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é par Dudu
Posté

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).

Posté
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 ;)

Posté

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.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...