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?
Répondre
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êtecontent-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énementonload
se déclenche et que l'image a des dimensions physiques par la suite, le navigateur a réussi à charger l'image.
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
Mise en service de la dernière partie (JavaScript): http://jsfiddle.net/qXTQS/ –
Peut-être regarder les en-têtes HTTP? Juste une pensée.
- inspecter headers
- pour vérifier l'extension dans l'URL (.gif/ .png, etc.)
L'extension renvoie souvent des résultats corrects, mais n'est pas un facteur fiable dans les URL –
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.
Meilleur que dans, plus sûr, ou le plus rapide? –
Avec ou sans en faire la demande en premier? –
@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