Vérifier si un lien est mort

[Résolu]
Signaler
Messages postés
355
Date d'inscription
lundi 26 juillet 2004
Statut
Membre
Dernière intervention
26 juin 2012
-
Messages postés
355
Date d'inscription
lundi 26 juillet 2004
Statut
Membre
Dernière intervention
26 juin 2012
-
Bonsoir,

Sur mon site, j'ai une page avec pleins de liens externes vers mes partenaires. Le souci, c'est qu'il peut arriver qu'un des liens soit mort alors j'aimerai pouvoir vérifier si la cible existe.
J'ai écrit une fonction, mais elle semble ne fonctionner qu'avec des fichiers de code (html, php, asp, ...), alors que mes liens pointent principalement sur des pdfs.

function lien_mort($lien) // retourne false si lien mort
{
    $file = @fopen($lien, 'r');
    if ($file) return false;
    else return true;
}

Est-ce que quelqu'un saurait comment vérifier si un pdf existe? J'ai pensé peut-être au file_exists() ou encore en récupérant les headers du fichier, mais je ne sais pas quelle méthode serait la plus pertinente et laquelle fonctionnerait...

5 réponses

Messages postés
318
Date d'inscription
mardi 27 mai 2003
Statut
Membre
Dernière intervention
11 mars 2010
1
Dans le php.ini tu trouveras allow_url_fopen. C'est un paramètre qui défini si tu peux utiliser les fonctions de manipulation de fichier sur des url.

Visiblement il est désactivé sur ton serveur, il suffit de l'activer pour que ta fonction marche correctement.

Grrrrrrrrrrr
Messages postés
318
Date d'inscription
mardi 27 mai 2003
Statut
Membre
Dernière intervention
11 mars 2010
1
Bonjour,

la méthode que tu utilise fonctionne, je l'ai testée. Il doit y avaoir un problème à un autre endroit.

Peux tu donner plus de précisions ?

Grrrrrrrrrrr
Messages postés
355
Date d'inscription
lundi 26 juillet 2004
Statut
Membre
Dernière intervention
26 juin 2012
1
Merci pour ta réponse et en effet après plusieurs tests, j'ai remarqué que ce n'était pas les pdf qui posaient problème, mais simplement le fait que je soumette des urls de fichiers distants à ma fonction et c'est ça qu'il aime pas !
Alors comment faire pour que par exemple: lien_mort("http://www.google.fr") me retourne false?

voici les résultats de mes tests:

lien_mort("index.php") -> false
lien_mort("test.pdf") -> false
lien_mort("http://www.monsite.com/test.pdf") -> true
lien_mort("http://www.autre-site.com/test.pdf") -> true
lien_mort("http://www.google.fr") -> true
lien_mort("http://ce-site.n-existe-pas.com/prout/zut.tjz") -> true

Voilà, le résumé de mes tests. En résumé, ce qui est en rouge et ce qui ne retourne pas ce que je voudrais...
Merci de ton aide,

FF

PS: je vois que j'avais fait une erreur dans le commentaire de la fonction que j'ai posté:
function lien_mort($lien) // retourne true si lien mort
Je le signale pour éviter toute confusion...
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
salut

tu peux utiliser curl pour tester si t'as une erreur 404 ou autre chose.
Messages postés
355
Date d'inscription
lundi 26 juillet 2004
Statut
Membre
Dernière intervention
26 juin 2012
1
Salut, ok merci beaucoup tout marche, tout est ok :-)