2010-05-20 4 views
3

J'essaie de détecter si une image existe sur un serveur distant. Cependant, j'ai essayé plusieurs méthodes et je ne peux pas les faire fonctionner.Comment détecter la redirection de page avec PHP?

En ce moment je suis en train d'utiliser ceci:

 
if (!CheckImageExists("http://img2.netcarshow.com/ABT-Audi_R8_2008_1024x768_wallpaper_01.jpg")) { 
    print_r("DOES NOT EXIST"); 
} else { 
    print_r("DOES EXIST"); 
}; 

function CheckImageExists($imgUrl) { 
    if (fopen($imgUrl, "r")) { 
     return true; 
    } else { 
     return false; 
    }; 
}; 

Mais il retourne « true » si l'image existe réellement ou non (l'image ci-dessus devrait, mais changer pour charabia et il sera toujours revenir 'vrai'). J'ai le sentiment que cela pourrait être parce que si l'URL n'existe pas, il redirige vers la page d'accueil du site. Mais je ne sais pas comment le détecter.

Merci pour toute aide!

+0

Vous pouvez facilement tester cette hypothèse en collant l'URL dans un navigateur (à moins que vous ne pensiez que PHP redirige ... mais je peux vous dire que ce n'est pas le cas) – Brian

+0

Oh je sais avec certitude qu'il redirige- si l'image n'est pas n'existe pas, il redirige juste vers la page d'accueil du site. Cette URL que je suis en train de tester ci-dessus est valide, vous pouvez l'essayer vous-même. – blabus

Répondre

2

Utilisez cURL. Après l'extraction de la ressource, vous pouvez obtenir le code d'erreur curl_errno().

+0

J'ai également essayé cette méthode, cependant, je récupère un code '200', que l'image existe réellement ou non, et redirige juste. Donc, je ne sais pas comment je peux utiliser cela pour faire la distinction entre les deux. – blabus

+0

Le code 200 est pour OK, ce qui signifie que ce n'est pas un 404 alors oubliez ça. Je vois que si je demande http://img2.netcarshow.com/ABT-Audi_R8_2008_1024x768_wallpaper_01.jpg2, qui n'existe pas, j'obtiens une page valide. Étant donné que ce site n'est pas conforme au W3C (n'envoie pas 404), vous devez gérer celui-ci manuellement, c'est-à-dire inspecter le contenu reçu pour voir s'il s'agit d'une page 404 "personnalisée". – Seb

0

Il y a de fortes chances que vous récupériez une page HTML dans votre $ imgUrl contenant "404 image introuvable" ou quelque chose de similaire.

Vous devriez être en mesure de vérifier la réponse pour un code indiquant que la demande a échoué ou redirigé.

+0

Comment pourrais-je vérifier le code? Parce que, comme je l'ai dit plus haut, une méthode que j'ai essayée retournerait le code '200' si l'image existait réellement, ou n'existait pas et juste redirigée. – blabus

0

Cela devrait faire l'affaire (en utilisant la taille de l'image):

if (!CheckImageExists("http://www.google.com/intl/en_ALL/images/srpr/logo1w.png")) { 
    echo 'DOES NOT EXIST'; 
} else { 
    echo 'DOES EXIST'; 
}; 

function CheckImageExists($imgUrl) { 
    if (@GetImageSize($imgUrl)) { 
     return true; 
    } else { 
     return false; 
    }; 
}; 
+0

J'ai aussi essayé cette méthode, mais elle renvoie toujours 'false', même pour les images qui existent. – blabus

0

obtenu ce travail avec la méthode de Seb. Juste utilisé YQL pour inspecter le contenu réel de la page et déterminer s'il s'agit d'une erreur ou non.

Questions connexes