[PHP] Utilisation de fsockopen pour vérification d'url
13 messages • Page 1 sur 1
Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics
[PHP] Utilisation de fsockopen pour vérification d'url
Bonjour les amis,
est ce que quelqu'un saurait coment faire pour récupérer le code de retour d'une page précise en php.
Je sais que fsockopen fonctionne pour un NDD, mais à priori il ne semble pas fonctionner avec une page en particulier.
Exemple :
fonctionne
Ne fonctionne pas...
Une idée? Une source?
Merki d'avance
est ce que quelqu'un saurait coment faire pour récupérer le code de retour d'une page précise en php.
Je sais que fsockopen fonctionne pour un NDD, mais à priori il ne semble pas fonctionner avec une page en particulier.
Exemple :
- Code: Tout sélectionner
$fp = fsockopen('www.example.com', 80, $errno, $errstr, 30);
if (!$fp) {
echo "ERREUR ($errno)";
}
fonctionne
- Code: Tout sélectionner
$fp = fsockopen('www.example.com/rep1/index.html', 80, $errno, $errstr, 30);
if (!$fp) {
echo "ERREUR ($errno)";
}
Ne fonctionne pas...
Une idée? Une source?
Merki d'avance
-

biddybulle - WRInaute accro

- Messages: 1470
- Inscription: Lun Mai 30, 2005 21:55
lit son contenu
et si tu n arrive pas à lire alors tu met un 404
et si tu n arrive pas à lire alors tu met un 404
Tu devrais plutôt regarder du côté du module curl qui est en général disponible sur les hébergements, ce sera plus rapide et aussi plus simple à mettre en oeuvre.
- Code: Tout sélectionner
$c = curl_init();
curl_setopt( $c, CURLOPT_URL, $url );
curl_setopt($c, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt( $c, CURLOPT_CONNECTTIMEOUT, 5 );
$r = curl_exec( $c );
$infos = curl_getinfo( $c );
$error = curl_error( $c );
$errno = curl_errno( $c );
curl_close( $c );
if ( $infos['http_code'] != 200 ) {
if ( $errno != 0 ) {
$error = 'Erreur lors de la récupération de la page: '.$error;
}
else {
$error = 'Erreur lors de la récupération de la page: code '.$infos['http_code'];
}
}
function check_connect($host,$path)
//verifie la validite de l'adresse, c'est a dire on regarde si le site existe bien...
//on rend dans un tableau :
// "statut" : 0 si KO, 1 si redirect ou bien pour faire passer en local, 2 si OK
// "code" : code HTTP
// "message" : message
{
if(!TEST_URL)
//si on travaille en local, on ne se connecte pas
{
$tab_return["statut"] = 1;
$tab_return["code"] = 0;
$tab_return["message"] = "<font color=\"#ff9900\">Pas de test de connexion</font>\n";
return $tab_return;
}
$connect = 0;
$no_code = 0;
//connexion par socket
if ($fp = @fsockopen($host,80))
{
//traitement du path
if(substr($path,strlen($path)-1) != '/')
{
if(!ereg("\.",$path))
$path .= "/";
}
//envoi de la requete HTTP
fputs($fp,"GET ".$path." HTTP/1.1\r\n");
fputs($fp,"Host: ".$host."\r\n");
fputs($fp,"Connection: close\r\n\r\n");
//on lit le fichier
$line = fread($fp,255);
$en_tete = $line;
//on lit tant qu'on n'est pas la fin du fichier ou qu'on trouve le debut du code html...
while (!feof($fp) && !ereg("<",$line) )
{
$en_tete .= $line;
$line = fread($fp,255);
}
fclose($fp);
//on switch sur le code HTTP renvoye
$no_code = substr($en_tete,9,3);
switch ($no_code)
{
// 2** la page a été trouvée
case 200 : $message = "OK";
$color = "#33cc00";
$connect = 2;
break;
case 204 : $message = "Cette page ne contient rien! (204)";
$color = "#ff9966";
break;
case 206 : $message = "Contenu partiel de la page! (206)";
$color = "#ff9966";
break;
// 3** il y a une redirection
case 301 : $message = "La page a été déplacéé définitivement! (301)";
$message .= seek_redirect_location($en_tete);
$color = "#ff9966";
$connect = 1;
break;
case 302 : $message = "La page a été déplacéé momentanément! (302)";
$message .= seek_redirect_location($en_tete);
$color = "#ff9966";
$connect = 1;
break;
// 4** erreur du coté du client
case 400 : $message = "Erreur dans la requête HTTP! (400)";
$color = "#ff0000";
break;
case 401 : $message = "Authentification requise! (401)";
$color = "#ff0000";
break;
case 402 : $message = "L'accès à la page est payant! (402)";
$color = "#ff0000";
break;
case 403 : $message = "Accès à la page refusé! (403)";
$color = "#ff0000";
break;
case 404 : $message = "Page inexistante! (404)";
$color = "#ff0000";
break;
// 5** erreur du coté du serveur
case 500 : $message = "Erreur interne au serveur! (500)";
$color = "#ff0000";
$connect = 1;
break;
case 502 : $message = "Erreur à cause de la passerelle du serveur! (502)";
$color = "#ff0000";
break;
// cas restant
default : $message = "Erreur non traitée dont le numéro est : $no_code!";
$color = "#000000";
break;
}
}
else
{
$message = "Impossible de se connecter par socket";
$color = "#ff0000";
}
//creation du tableau avec les valeurs a rendre
$data_return["statut"] = $connect; //la page est OK ou KO (200 => OK sinon KO)
$data_return["code"] = $no_code; //code HTTP renvoye
$data_return["message"] = "<font color=\"".$color."\">".$message."</font>\n"; //message a afficher
return $data_return;
}
Dixit phpmyannu
thierry8 a écrit:Cela permet également de teste si un nom de domaine est déjà existant ?
Non, car un nom de domaine n'est pas forcément relié à un site web, si tu veux savoir si un nom de domaine existe ou nom, il faut interroger un serveur whois.
thierry8 a écrit:Et n'est-il pas possible de le faire sous forme php ?
Si bien sûr, avec fsockopen ou curl, il faut connaitre le protocole pour interroger les serveurs whois.
Sinon, il y a un module PEAR Net_whois qui permet de le faire.
Est-ce que quelqu'un qui l'utilise ou utilise une autre méthode pourrait me guider... Parce que si je demande c'est que je suis pomé et que je n'ai pas du tout comment faire...
J'ai lu cela:http://www.go-pear.org/manual/fr/package.networking.net-whois.query.php
Mais ça ne m'avance pas plus..
Si l'on pouvait faire un cas pratique: (ou c'est trop compliqué pour partagé ? dans ce cas je comprendrais, mais dites le de manière que je le sache)
EDIT 1:
Sur cette page je l'ai téléchargé:
-http://pear.php.net/package/Net_Whois/
EDIT 2:
Je précise que je ne souhaite pas afficher le whois, mais uniquement vérifier si un nom de domaine existe, de façon fiable. Merci
J'ai lu cela:http://www.go-pear.org/manual/fr/package.networking.net-whois.query.php
Mais ça ne m'avance pas plus..
Si l'on pouvait faire un cas pratique: (ou c'est trop compliqué pour partagé ? dans ce cas je comprendrais, mais dites le de manière que je le sache)
EDIT 1:
Sur cette page je l'ai téléchargé:
-http://pear.php.net/package/Net_Whois/
EDIT 2:
Je précise que je ne souhaite pas afficher le whois, mais uniquement vérifier si un nom de domaine existe, de façon fiable. Merci
-

Bourriquet - WRInaute passionné

- Messages: 635
- Inscription: Lun Sep 19, 2005 22:10
Pour avoir le code de retour exact d'une page, il faut simplement effectuer une requête HTTP de type HEAD...
fsockopen ouvre simplement une connexion, si tu n'envoie rien, c'est normal que tu n'ai rien en retour. Pour envoyer, il faut que tu utilises fwrite.
Ensuite, tu récupère tes données avec fread.
Voilà un exemple qui marche en PHP :
-http://phptrust.org/tools/
Marche uniquement avec PHP et les fonctions fsockopen, fread, fwrite, et fclose.
Pour vérifier qu'un nom de domaine n'existe pas, il suffit simplement de faire un whois sur le nom de domaine.
On peut le faire très simplement en faisant :
Cela lance un whois sous linux, et retourne le résultat dans $prout. Il reste juste à traiter la chaine.
A noter que sur certaines machines, avec un vieux whois, il faut lui indiquer le serveur à interroger, mais ça c'est pas dur, il suffit de détecter l'extention, et de prendre un serveur parmi la liste des serveurs des registry.
fsockopen ouvre simplement une connexion, si tu n'envoie rien, c'est normal que tu n'ai rien en retour. Pour envoyer, il faut que tu utilises fwrite.
Ensuite, tu récupère tes données avec fread.
Voilà un exemple qui marche en PHP :
-http://phptrust.org/tools/
Marche uniquement avec PHP et les fonctions fsockopen, fread, fwrite, et fclose.
Pour vérifier qu'un nom de domaine n'existe pas, il suffit simplement de faire un whois sur le nom de domaine.
On peut le faire très simplement en faisant :
- Code: Tout sélectionner
$prout = `whois nomdedomaine.com`;
Cela lance un whois sous linux, et retourne le résultat dans $prout. Il reste juste à traiter la chaine.
A noter que sur certaines machines, avec un vieux whois, il faut lui indiquer le serveur à interroger, mais ça c'est pas dur, il suffit de détecter l'extention, et de prendre un serveur parmi la liste des serveurs des registry.
13 messages • Page 1 sur 1
Formation recommandée sur ce thème :
Formation Google Analytics : en 2 jours, apprenez comment exploiter l'essentiel des possibilités de l'outil de mesure d'audience de Google. Formation animée par Julien Coquet, expert certifié officiellement par Google Analytics.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- Comment gérer simplement les sitemaps de plusieurs sites au même endroit
- Nouvelle version de GoogleStats : v1.1
- Mort du META tag "keywords"
- Utilisation des différents produits et services Google aux Etats-Unis (Janvier 2008)
- 1ère faille de sécurité découverte sur Google Chrome
- Article sur le fichier .htaccess
- Comment créer un compte Webmaster Tools sur Google
- La commande site: dans Google
- Google acquiert YouTube pour 1,65 Md$
- API Google Maps en Flash / Flex
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités



le forum