2010-12-14 5 views
2

Wie erkennt man am besten, dass eine URL die eines Bildes ist?Wie erkennt man am besten, dass eine URL die eines Bildes ist?

+5

Am besten, am sichersten oder am schnellsten? –

+0

Mit oder ohne zuerst eine Anfrage an sie? –

+3

@MK_Dev: Sie können dies nicht feststellen, ohne eine Anfrage zu stellen. Ein Server kann unabhängig von der Dateierweiterung beliebige Inhalte für beliebige URLs zurückgeben.(Es gibt nicht wirklich ein Konzept der Dateierweiterung für URLs.) – cdhowie

Antwort

9

PHP:

  • Sicherste - holen die tatsächlichen Bilddaten. Führen Sie eine getimagesize() aus, um den Bildtyp zu ermitteln, indem Sie die Header-Bytes in der Datei tatsächlich lesen.

  • Schnellste - holen Sie die Ressource, analysieren Sie die Antwortheader und suchen Sie nach dem content-type Header. Diese Methode ist nicht so zuverlässig wie die erste: Der Server könnte lügen oder falsch konfiguriert sein.

  • Noch schneller - eine HEAD-Anfrage für die URL, und suchen Sie nach der content-type Header. Funktioniert möglicherweise nicht für dynamische Bildressourcen. Ich habe keine Erfahrung damit, so kann die Laufleistung variieren.

  • Ultra-paranoid sicherste aber slayow - holen Sie die tatsächlichen Bilddaten mit PHP, kopieren Sie sie in eine neue Bildquelle mit der GD-Bibliothek, und speichern Sie das Ergebnis. Wenn dieser Prozess funktioniert, ist es garantiert ein gültiges, unlackiertes Bild zu sein. Ressourcenintensiv; einige gültige Bildformate, die ein Browser unterstützt, aber GD wird nicht unter den Tisch fallen.

Ich würde für die erste Option gehen.

JavaScript Verwendung:

  • Laden der Bildressource in eine img Element. Wenn das Ereignis onload ausgelöst wird und das Bild anschließend physische Abmessungen aufweist, konnte der Browser das Bild laden.
+0

Der Inhaltstyp garantiert noch nicht, dass es wirklich (wirklich) ist; gesehene Gelegenheiten, wenn Dinge falsch behandelt werden. Ich mag jedoch den stabileren getimagesize() Check. – zanlok

+1

Den letzten Teil (JavaScript) verwenden: http://jsfiddle.net/qXTQS/ –

2

Schauen Sie sich die HTTP-Header an? Nur ein Gedanke.

2

Versuchen Sie, die Header der Antwort zu überprüfen, sobald Sie eine HTTP-Verbindung dieser URL angefordert haben ... versuchen Sie, nach dem MIME-Typ zu suchen.

+3

'Content-Type' ist die Überschrift, nach der Sie suchen. – cdhowie

+0

@cdhowie yup, danke. – Cristian

1
  • inspizieren headers
  • Prüfung für die Erweiterung in URL (.gif/.png etc)
+1

Die Erweiterung gibt oft korrekte Ergebnisse zurück, ist aber kein zuverlässiger Faktor in URLs –

1

Wenn Sie nur die URL lieber als die Antwort des Servers wird Ihnen, wenn Sie fordern die URL an, dann können Sie nur anhand der Dateierweiterung raten, aber es gibt KEINE Garantie, dass eine Datei mit der Endung .jpg ein Bild ist oder dass eine Datei mit der Endung .php kein Bild ist.

Sie können wahrscheinlich ziemlich glücklich URLs mit Endung in .jpg, .gif, .png usw. werden Bilder sein, aber es ist nicht garantiert.

Für alles andere ist es im Wesentlichen unmöglich, es sei denn Sie retrive es.

Verwandte Themen