2012-03-29 8 views
0

Ich habe eine Web-Anwendung auf PHP bauen, die Bilder auf externen Servern gehostet (tut einige Verarbeitung und). Einige dieser Bilder (d. H. Von Flickr) hinterlassen beim Löschen eine Weiterleitung, die auf ein "Missing Image" -Gif oder etwas Ähnliches verweist.Client-Seite Header-Informationen

die get_headers() Funktion in PHP auf jedem Bild Durch die Verwendung konnte ich serverseitige, wenn ein Bild wurde oder nicht gelöscht überprüfen (zB durch Prüfen, ob die Content-Typeimage/gif war statt image/jpg, auf Flickr Bilder).

Das Problem ist, dass jede Seite 20-100 Bilder im Durchschnitt (manchmal sogar mehr) zurückgibt, und get_headers() erfordert im Durchschnitt 0,3-0,5s für jedes Bild, so dass die Wartezeit für den Benutzer zu lang.

Ich fragte mich, ob diese Überprüfung clientseitig mit Javascript durchgeführt werden könnte. Der Benutzer wird darauf warten, dass die Bilder geladen werden (wie bei jeder Seite), ich werde die Bilder prüfen, wenn sie gültig sind, und die Anzeigeeigenschaft auf keine der fehlenden setzen.

Antwort

0

Sie können curl_multi_exec() verwenden, um mehrere URLs gleichzeitig zu überprüfen. Wenn Sie die folgenden cURL-Optionen verwenden:

CURLOPT_FOLLOWLOCATION = FALSE 
CURLOPT_NOBODY = TRUE 
CURLOPT_HEADER = TRUE 

... dies verhindert die folgenden Weiterleitungen. Sie können diese Informationen dann verwenden (ob die Antwort eine Weiterleitung ist oder nicht, siehe CURLINFO_HTTP_CODE in curl_get_info()), um festzustellen, ob die Datei vorhanden ist. Wenn Sie curl_multi_exec() verwenden, führen Sie mehrere Prüfungen gleichzeitig durch, wodurch die Ladezeit der Seite drastisch reduziert werden kann.

+0

'curl_multi_exec()' reduziert die Prüfung auf ~ 0.5sec für 24 Bilder (wahrscheinlich für mehr als auch, da gleichzeitig ausgeführt wird), die für die Art der Anwendung akzeptabel ist, so dass es wie ein Charme funktioniert. Vielen Dank. – Finik

0

Sie können diese Methode verwenden, um den Image-Typ zu bestimmen, aber es kann zu zusätzlichen Datenverkehr auf Ihren Servern führen.

var request; 
    request = $.ajax({ 
       type: "HEAD", 
       url: 'your image url', 
       success: function() { 
       alert("Size is " + request.getResponseHeader("Content-Length")); 
       alert("Type is " + request.getResponseHeader("Content-Type")); 
       } 
      }); 

hier gefunden: Can I get an image's file size and mime-type via JavaScript (FireFox/Gecko/Mozilla only)

+0

Guter Punkt, ich habe total vergessen, ich hätte AJAX verwendet, um die Abfragen zurück an meinen Server zu leiten. Ich werde das für ähnliche Dinge in der Zukunft behalten. – Finik

Verwandte Themen