2010-12-14 4 views
2

Quelle est la meilleure façon de détecter qu'une URL est celle d'une image?Quelle est la meilleure façon de détecter qu'une URL est celle d'une image?

+5

Meilleur que dans, plus sûr, ou le plus rapide? –

+0

Avec ou sans en faire la demande en premier? –

+3

@MK_Dev: Vous ne pouvez pas le détecter sans faire une requête. Un serveur est libre de retourner tout type de contenu qu'il souhaite pour n'importe quelle URL, indépendamment de l'extension de fichier.(Il n'y a pas vraiment un concept d'extension de fichier pour les URL.) – cdhowie

Répondre

9

En utilisant PHP:

  • Safest - Récupère les données d'image réelle. Effectuez un getimagesize() pour déterminer le type d'image en lisant les octets d'en-tête dans le fichier. Le plus rapide - récupère la ressource, analyse les en-têtes de réponse et recherche l'en-tête content-type. Cette méthode n'est pas aussi fiable que la première: Le serveur peut être menteur ou mal configuré.

  • Encore plus rapide - effectuez une requête HEAD sur l'URL et recherchez l'en-tête content-type. Peut ne pas fonctionner pour les ressources d'images dynamiques. Je n'ai aucune expérience avec ceci, ainsi le kilométrage peut varier. Ultra-paranoïaque plus sûr mais slooow - récupère les données d'image réelles en utilisant PHP, les copie dans une nouvelle ressource d'image en utilisant la bibliothèque GD, et enregistre le résultat. Si ce processus fonctionne, il est garanti être une image valide et non endommagée. Intensive en ressources certains formats d'image valides qu'un navigateur prend en charge mais que GD ne tombera pas sous la table.

J'irais pour la première option.

Utilisation de JavaScript:

  • Charge la ressource d'image dans un élément img. Si l'événement onload se déclenche et que l'image a des dimensions physiques par la suite, le navigateur a réussi à charger l'image.
+0

Le type de contenu ne garantit toujours pas qu'il est vraiment (pour sûr); vu des occasions où les choses sont mal gérées. J'aime la vérification getimagesize() plus robuste, cependant. – zanlok

+1

Mise en service de la dernière partie (JavaScript): http://jsfiddle.net/qXTQS/ –

2

Peut-être regarder les en-têtes HTTP? Juste une pensée.

2

Essayez de vérifier les en-têtes de la réponse une fois que vous avez demandé une connexion HTTP de cette URL ... essayez de rechercher le type mime.

+3

'Content-Type' est l'en-tête que vous recherchez. – cdhowie

+0

@cdhowie yup, merci. – Cristian

1
  • inspecter headers
  • pour vérifier l'extension dans l'URL (.gif/ .png, etc.)
+1

L'extension renvoie souvent des résultats corrects, mais n'est pas un facteur fiable dans les URL –

1

Si vous avez seulement l'URL plutôt que la réponse du serveur vous donnera quand vous demandez l'URL, alors la seule chose que vous pouvez faire est de deviner en fonction de l'extension du fichier, mais il n'y a AUCUNE garantie qu'un fichier se terminant par .jpg est une image ou qu'un fichier se terminant par .php n'est pas une image.

Vous pouvez probablement être raisonnablement heureux les URL se terminant par .jpg, .gif, .png etc. seront des images mais ce n'est pas garanti.

Pour toute autre chose, c'est essentiellement impossible, sauf si vous le retrouvez.

Questions connexes