tester la validité de liens

tester la validité de liens - PHP - Programmation

Marsh Posté le 22-07-2005 à 10:40:52    

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! ;)

Reply

Marsh Posté le 22-07-2005 à 10:40:52   

Reply

Marsh Posté le 22-07-2005 à 11:14:08    

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


 

Reply

Marsh Posté le 22-07-2005 à 11:18:58    

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
Reply

Marsh Posté le 25-07-2005 à 14:17:30    

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??

Reply

Marsh Posté le 25-07-2005 à 16:29:38    

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
Reply

Marsh Posté le 25-07-2005 à 18:48:39    

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

Reply

Marsh Posté le 25-07-2005 à 19:07:25    

Sur le forum


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

Marsh Posté le 25-07-2005 à 19:14:11    

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

Reply

Marsh Posté le 25-07-2005 à 19:17:46    

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
Reply

Marsh Posté le 25-07-2005 à 21:00:30    

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! ;)

Reply

Marsh Posté le 25-07-2005 à 21:00:30   

Reply

Marsh Posté le 26-07-2005 à 09:12:17    

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!

Reply

Marsh Posté le 26-07-2005 à 10:19:04    

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
Reply

Marsh Posté le 26-07-2005 à 10:24:39    

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

Reply

Marsh Posté le 26-07-2005 à 10:35:10    

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

Reply

Marsh Posté le 27-07-2005 à 10:23:59    

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! ;)

Reply

Marsh Posté le 27-07-2005 à 10:31:30    

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
Reply

Marsh Posté le 27-07-2005 à 10:39:17    

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:

Reply

Marsh Posté le 27-07-2005 à 10:52:57    

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??  :??:

Reply

Marsh Posté le 27-07-2005 à 10:55:35    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed