Vérifier validité d'une url

3 réponses
AuteurMessage

radins |
Modérateur

Photo de radins

Inscrit le : 09/05/2005

# Le 20/03/2006 à 17:05

J'essaie de vérifier si une url est "valide" non en testant avec une regexp (je n'en ai pas trouvé de valides dans 100% des cas) mais en vérifiant s'il existe une page derrière cette url.. j'ai donc trouvé/écrit ça:


function url_exists($strURL) {
$resURL = curl_init();
curl_setopt($resURL, CURLOPT_URL, $strURL);
curl_setopt($resURL, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($resURL, CURLOPT_HEADERFUNCTION, 'curlHeaderCallback');
curl_setopt($resURL, CURLOPT_FAILONERROR, 1);

@curl_exec ($resURL);

$intReturnCode = curl_getinfo($resURL, CURLINFO_HTTP_CODE);
curl_close ($resURL);
if ($intReturnCode != 200 && $intReturnCode != 302 && $intReturnCode != 304) {
return false;
}Else{
return true ;
}
}


Ça marche à peu près bien sauf si j'essaie de tester une url d'un domaine non-existant style http://www.sdfsdfsdfsdfsfsd.frOuvrir dans une nouvelle fenetre - du coup ça me retourne 302 ... (cela dit avec un http://www.sdfsdfsdfsdfsfsd.fr/machin.htmOuvrir dans une nouvelle fenetre ça marche..)

A votre avis c'est quoi le meilleur moyen de vérifier si sous une url existe une page?

MathieuC | Mathieu
Modérateur

Photo de MathieuC

Inscrit le : 15/07/2005

# Le 20/03/2006 à 18:07

L'idee est bonne, et tu ne pourras pas mieux tester que comme ca

radins a dit :
Ça marche à peu près bien sauf si j'essaie de tester une url d'un domaine non-existant style http://www.sdfsdfsdfsdfsfsd.frOuvrir dans une nouvelle fenetre - du coup ça me retourne 302 ... (cela dit avec un http://www.sdfsdfsdfsdfsfsd.fr/machin.htmOuvrir dans une nouvelle fenetre ça marche..)


Ca ca doit etre du a Curl qui doit avoir un comportement bizarre si le NDD n'existe pas.

Peut etre que tu devrais faire une requete DNS avant ton test (mais ca l'alourdi) pour eviter que curl te "mente".

PyRoFlo | Florent
Modérateur

Photo de PyRoFlo

Inscrit le : 09/05/2005

# Le 21/03/2006 à 17:59

Mon framework a dit:
/**
*
* Fonction qui teste l'existence d'une URL passée en paramètre.
*
* @param url URL à tester.
*
* @return true si l'adresse existe sinon false.
*
*/

function urlExists($url) {

$url = preg_replace('#^http:#i','',$url);

if (preg_match('#^//#', $url)) {

@list(,,$domain,$file) = explode('/',$url, 4);

$file = '/'.$file;
}
else {
return '';
}

$fId = @fSockOpen($domain,80);

if (!$fId) {

return '';
}

fputs($fId,"HEAD ".$file." HTTP/1.0\r\nHost: ".$domain."\r\n\r\n");

$head = fRead($fId, 4096);

fClose($fId);

return preg_match('#^HTTP/.*\s+200\sOK\s#i',$head);
}

Feu d'artifice ParisOuvrir dans une nouvelle fenetre

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 21/03/2006 à 18:37

A priori c'était un problème de DNS... qui faisait pointer tous les domaines invalides sur une de mes machines

Pyro : le soucis via socket, c'est que tu ne gères pas les redirections

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

Répondre

Vous ne pouvez pas participer au forum, car votre inscription n'a pas été validée. Pour vous faire valider en tant que Membre, cliquez ici.

© MHN - Tous droits réservés | CNIL N°844440 | 24/11/2024 3:23:49 | Généré en 5.47ms | Contacts | Mentions légales |