Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1649 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  tester la validité de liens

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

tester la validité de liens

n°1156889
mick8569
Posté le 22-07-2005 à 10:40:52  profilanswer
 

Salut à tous!
 
Est-ce qu'il est possible en php de tester la validité d'un lien (si le lien est mort ou pas)?
 
Si oui, est-ce que vous avez une idée de la marche à suivre?
 
J'ai regardé un peu sur le net mais j'ai pas trouvé grand chose, à vrai dire même rien de très interessant à ce sujet...
 
Voila si quelqu'un peut m'apporter une réponse! ;)

mood
Publicité
Posté le 22-07-2005 à 10:40:52  profilanswer
 

n°1156940
akio
Posté le 22-07-2005 à 11:14:08  profilanswer
 

avec google je trouve ceci

Citation :


Une petite astuce pratique pour tester la validité d'un lien.

Code :
  1. <?php
  2. $site = "http://www.phpscripts-fr.net";
  3. $file = @fopen($site, 'r');
  4. if ($file) {echo 'Lien valide !';}
  5. else {echo 'Lien mort !';}
  6. ?>


 

n°1156953
esox_ch
Posté le 22-07-2005 à 11:18:58  profilanswer
 

Question deja posée, reponse deja donnée , methode proposée par akio tres approximative et pas forcemment juste


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1159033
mick8569
Posté le 25-07-2005 à 14:17:30  profilanswer
 

Le code que tu m'a passé ne fonctionne pas avec moi. Voila ce que je fais :
 
$adresse = "http://www.google.fr";
$file = fopen($adresse,'r');  
if ($file) { echo "OK"; }
else { echo "Lien Mort!"; }
 
et voici ce que ca me répond :
 
Warning: php_hostconnect: connect failed  
Warning: fopen("http://www.google.fr", "r" ) - Bad file descriptor  
 
Vous savez de quoi ca peut venir? Ou alors, est-ce que vous connaissez une autre solution pour tester si un lien est valide ou non??

n°1159185
esox_ch
Posté le 25-07-2005 à 16:29:38  profilanswer
 

Je crois que c'est Jagstang qui avait ecrit un script assez complet sur la question ... parceque ton script (meme debuggé) ne verra pas la difference entre une bonne page et une erreur 404


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1159324
mick8569
Posté le 25-07-2005 à 18:48:39  profilanswer
 

Et je peux le trouver ou ce script stp???
 
Merci! :d

n°1159342
esox_ch
Posté le 25-07-2005 à 19:07:25  profilanswer
 

Sur le forum


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1159352
mick8569
Posté le 25-07-2005 à 19:14:11  profilanswer
 

Je viens de parcourir le forum php mais j'ai rien vu qui pouvait ressembler a ca... (dans rechercher j'ai mis comme mot de recherche liens, avec les deux cents derniers messages mais rien vu... :( )

n°1159359
masklinn
í dag viðrar vel til loftárása
Posté le 25-07-2005 à 19:17:46  profilanswer
 

Module HTTP-Request de Pear
Suffit de récupérer le code de réponse, et en fonction du code de réponse d'agir en concéquence.
 
Les codes de réponse sont des nombres à 3 chiffres divisés en classes (le chiffre des centaines).
 
On trouve 5 classes de réponses dans HTTP1.1, dont une très rare (1) et une trop rare (3):
 
Classe 1 - Informations
Forme 1xy
Ne doit jamais être envoyé à un client HTTP1.0
 

  • 100 - Continue: le client doit continuer la requête, informe simplement que le server a bien reçu la première partie de la requête et que celle ci n'a pas encore été rejetée, plus d'informations ici
  • 101 - Switching Protocols: le serveur a reçu et compris la demande de changement de protocole et accepte celle ci


Classe 2 - Réussite
Forme 2xy
Indique que la requête a été reçue, comprise et acceptée
 

  • 200 - OK: requête réussie, les informations associés dépendent du type de requête.
  • 201 - Created: La ressource demandée (fichier, champ, ...) a bien été créée. Doit être envoyé uniquement après création d'une ressource et doit être associé aux URI de la ou des ressource(s) créée(s)
  • 202 - Accepted: La requête a été reçue et est en cours de traitement, mais n'est pas encore terminée. Permet à l'UA de ne pas rester connecté au serveur en attente. Doit être associé à l'état actuel de la requête et à un pointeur sur un moyen de suivre l'évolution de celle ci ou une estimation de la fin de traitement.
  • 203 - Non-Authoritative Information: Pas bien compris, apparement un code de réponse ne venant pas du serveur de traitement, peut être incomplet ou surcomplet.
  • 204 - No Content: La requête a été reçue et traitée mais le serveur ne renvoie rien
  • 205 - Reset Content: Le serveur a terminé son traitement et l'UA doit recharger le document ayant généré la requête (par exemple un lien sur une page qui génère un 205 force le navigateur à recharger la page contenant le lien)
  • 206 - Partial Content: Le serveur a exécuté une requête partielle


Classe 3 - Redirections
Forme 3xy
Indique qu'une redirection doit être effectuée pour remplir la requête, le client peut effectuer cette redirection sans en informer l'utilisateur.
 

  • 300 - Multiple Choices: La ressource demandée correspond à plusieurs représentations/documents
  • 301 - Moved Permanently: Le document demandé a été déplacé de manière permanente. La nouvelle position du document DOIT être associée à ce header.
  • 302 - Found
  • 303 - See Other
  • 307 - Temporary Redirect: Trois redirections temporaires avec chacune ses spécificités, en cas de doute utiliser 302
  • 304 - Not Modified: Indique que le contenu n'a pas été modifié depuis la dernière visite (il peut donc être tiré du cache du navigateur par exemple, ou non navigué si c'est un flux RSS/Atom)
  • 305 - Use Proxy: Il est impératif d'accéder à la ressource via un proxy, l'URI du proxy à utiliser doit être associé au header


Classe 4 - Erreurs client
Forme 4xy
Réponse à des erreurs du client, la pluspart du temps la demande d'une ressource n'existant pas ou plus.
 

  • 400 - Bad Request: La requête n'a pas pu être comprise par le serveur (requête malformée ou incomplète)
  • 401 - Unauthorized: La requête envoyée demande une identification
  • 402 - Payment Required: Actuellement non utilisé
  • 403 - Forbidden: Le serveur a compris la requête mais refuse de l'exécuter
  • 404 - Not Found: Le serveur n'a trouvé aucun document correspondant à la requête
  • 405 - Method Not Allowed: La méthode demandée dans la requête n'est pas autorisée pour la ressource demandée
  • 406 - Not Acceptable: La ressource demandée ne correspond à aucun des types acceptés dans le champ "Accept" du header
  • 407 - Proxy Authentication Required: Similaire à 401 mais indique que le client doit s'identifier auprès d'un proxy
  • 408 - Request Timeout: Le client n'a généré aucune requête pendant le temps d'attente du serveur (requêtes partielles par exemple)
  • 409 - Conflict: La requête n'a pu être complétée pour cause de conflits entre des ressources correspondant au document demandé.
  • 410 - Gone: La ressource ou le document demandé a existé mais n'existe plus et aucune addresse de redirection (qui correspondrait au 301) n'est connue.
  • 411 - Length Required: Le serveur refuse de répondre à la requête si celle ci ne possède pas de "content-length" défini
  • 412 - Precondition Failed: Une précondition sur l'un des headers de la requête a échoué
  • 413 - Request Entity Too Large: Le serveur refuse de compléter la requête parce que les informations associées à celle ci sont plus grosses que ce qu'il accepte
  • 414 - Request-URI Too Long: L'URI de la requête est plus longue que ce que le serveur accepte d'interpréter
  • 415 - Unsupported Media Type: Les données associées à la requête sont dans un format non géré par le serveur
  • 416 - Requested Range Not Satisfiable: Réponse d'erreur à une requête de type "Range"
  • 417 - Expectation Failed: Erreur correspondant à l'échec sur un champ de requête "Expect"


Classe 5 - Erreurs serveur
Forme 5xy
Une erreur est arrivée côté serveur le rendant incapable de répondre à la requête et celui-ci le sait.
 

  • 500 - Internal Server Error: Condition non prévue rencontrée
  • 501 - Not Implemented: L'une des fonctionalités demandées pour répondre à la requête n'a pas encore été implémentée
  • 502 - Bad Gateway: Le serveur, agissant comme un proxy ou une gateway, a reçu une réponse invalide du serveur distant.
  • 503 - Service Unavailable: Le serveur est actuellement incapable de fournir le service (surcharge ou maintenance par exemple)
  • 504 - Gateway Timeout: Le serveur, agissant comme un proxy ou une gateway, n'a pas reçu de réponse du serveur distant.
  • 505 - HTTP Version Not Supported: Le serveur ne supporte pas la version du protocole HTTP utilisée dans la requête0.


Message édité par masklinn le 25-07-2005 à 19:31:12

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1159511
mick8569
Posté le 25-07-2005 à 21:00:30  profilanswer
 

Merci Masklinn avec le package Module HTTP-Request de Pear je devrais pouvoir arriver à faire à peu près ce que je veux faire!
Je vais regarder ca de plus près demain au boulot!  
Merci à toi! ;)

mood
Publicité
Posté le 25-07-2005 à 21:00:30  profilanswer
 

n°1159777
mick8569
Posté le 26-07-2005 à 09:12:17  profilanswer
 

Bon j'ai encore un problème désolé d'insister avec ca....
Voila, j'ai mis tout ce qu'il fallait et j'arrive à utiliser la classe de Pear. Mais voila, peu importe quelle adresse je met, ca ne me renvoie jamais rien...
Est-ce que vous pensez que ca pourrait venir du fait que je suis connecté sur Internet derrière un proxy???
Merci de me répondre svp... ca m'évitera d'y passé plusieurs jours si ca vient de ca...
Merci!

n°1159818
esox_ch
Posté le 26-07-2005 à 10:19:04  profilanswer
 

Ca se peut ... faudrait voir / modifier les classes de pear en consequence ... *Hihi voila pourquoi j'utilise pas pear :D*


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1159825
gatsusat
Posté le 26-07-2005 à 10:24:39  profilanswer
 

mick8569 a écrit :

Bon j'ai encore un problème désolé d'insister avec ca....
Voila, j'ai mis tout ce qu'il fallait et j'arrive à utiliser la classe de Pear. Mais voila, peu importe quelle adresse je met, ca ne me renvoie jamais rien...
Est-ce que vous pensez que ca pourrait venir du fait que je suis connecté sur Internet derrière un proxy???Merci de me répondre svp... ca m'évitera d'y passé plusieurs jours si ca vient de ca...
Merci!


 
ben tu l'as la réponse.
 
PHP ne sait peut pas accéder au net du fait que tu passes par un proxy.
 
vire moi ce proxy a la con et trouve une meilleure facon d'acceder au net

n°1159840
mick8569
Posté le 26-07-2005 à 10:35:10  profilanswer
 

et tu utilises quoi alors essox_ch pour faire ca (si tu as deja essayé)??

n°1161150
mick8569
Posté le 27-07-2005 à 10:23:59  profilanswer
 

Excusez moi de redemander.. lol
Est-ce que vous pensez qu'il y a un moyen de donner les paramètres du proxy à php pour que je puisse récupérer les codes retours des pages??
 
J'ai vu aussi qu'il y avait dans la classe de Pear une méthode qui s'appelait setProxy mais j'ai pas très bien compris ce qu'elle faisait, voici ce que dit la doc :
 
In this example it is assumed that one wants to use the machine with the hostname proxy.example.com, where a proxy server is listening on port 8080, to proxy the outgoing connection to example.com.  
 
The second parameter of setProxy() is optional and defaults to 8080.  
 

Code :
  1. <?php
  2. require_once "HTTP/Request.php";
  3. $req =& new HTTP_Request("http://example.com/" );
  4. $req->setProxy("proxy.example.com", 8080);
  5. ?>


 
Est-ce que vous pensez que cette fonction résoudrait mes problèmes?? J'ai déjà essayé de l'utiliser mais sans succès, mais bon peut etre que je me suis trompé dans les paramètres.
 
Voila, merci! ;)

n°1161168
esox_ch
Posté le 27-07-2005 à 10:31:30  profilanswer
 

Pour te repondre, moi quand je dois faire ce genre de truc je passe par cURL ou meme par des sockets..


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1161180
mick8569
Posté le 27-07-2005 à 10:39:17  profilanswer
 

Si ca marche comme solution ca m'intéresse, tu peux m'en dire un peu plus sur cURL parce que je ne connais pas...
 
Les sockets j'ai deja essayé, j'avais essayé de faire un ping en php de cette facon :
 

Code :
  1. function ping($ip, $port)
  2. {
  3. $fp = fsockopen("$ip", $port, $errno, $errstr, 10);
  4. if(!$fp) {
  5.     return false;
  6. } else {
  7.     return true;
  8. }
  9. }


 
Mais ca aussi ca marchait pas, surement parce que je suis connecté derrière un proxy...  :fou:

n°1161212
mick8569
Posté le 27-07-2005 à 10:52:57  profilanswer
 

Je viens de regarder un peu cURL mais j'ai très bien compris à quoi ca servait exactement, est-ce que je peux savoir si une adresse existe avec cette librairie??  :??:

n°1161217
esox_ch
Posté le 27-07-2005 à 10:55:35  profilanswer
 

www.php.net et recherche curl ... J'admet que la doc que j'ai trouvé la dessus n'est pas forcemment ce qu'il y a de plus limpide :p D'ailleurs j'ai encore aujourduit quelques problemes des fois :p


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  tester la validité de liens

 

Sujets relatifs
[PHP] tester si c'est un dossierSGBD / ASP : Page tester des procédures stockées SQL Server depuis ASP
Connaissez vous un site pour tester son site avec le moteur IE ?liens qui marchent pas...
html : couleur des liens dans un tableauComment organiser son site web ? (ancien NDM + liens)
[jdbc] tester existence d'une table[C#] Une ListBox avec des liens "highlightés"
liens en css 
Plus de sujets relatifs à : tester la validité de liens


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR