Ich erstelle dynamische URLs von Bildern für Buch-ISBN. Ich brauche einen zuverlässigen Weg mit PHP, um zu überprüfen, ob die Bilder tatsächlich in der Remote-URL vorhanden sind. Ich habe verschiedene Ansätze mit verschiedenen PHP-Bibliotheken, CURL usw. ausprobiert, aber keine von ihnen funktioniert gut, einige von ihnen sind geradezu langsam. Angesichts der Tatsache, dass ich ungefähr 60 URLs für jedes Buch in meiner Datenbank erzeugen (und überprüfen muss!), Ist dies eine große Wartezeit. Irgendwelche Hinweise?Überprüfen Sie, ob Bild auf Remote-URL existiert
Antwort
Wenn die Bilder alle auf demselben Remote-Server (oder im selben Netzwerk) vorhanden sind, können Sie einen Web-Service auf diesem Server ausführen, der das Dateisystem auf die Image-Datei prüft und einen Bool-Wert zurückgibt Bild existiert oder nicht.
Wir reden über viele Websites, die nicht unter meiner Kontrolle stehen, so dass die Möglichkeit eines Web-Service ausgeschlossen ist. –
Es gibt keinen "einfachen" Weg hier - mindestens müssen Sie eine HEAD
Anfrage erzeugen und den resultierenden Inhaltstyp überprüfen, um sicherzustellen, dass es ein Bild ist. Das berücksichtigt keine möglichen Referrer-Probleme. Curl ist der Weg dorthin.
Ich denke, eine Curl-Anfrage zu machen, ohne den Körper zu holen, ist ein einfacher Weg. – markus
Ich habe für meine Immobilien Bild tue dies Tracking ...
$im = @imagecreatefromjpeg($pathtoimg);
if($im)
imagedestroy($im); // dont save, just ack...
elseif(!$missing[$inum])
$img404arr[] = $inum;
Es scheint 'schneller als das eigentliche Bild herunterzuladen, wobei etwa 0,3 Sekunden für jede von den Bildern, die avg 100k.
Ich wünschte, ich könnte nur einen Header-Check machen und lesen, ob ich eine 200 gegen eine 404 bekomme, ohne etwas herunterzuladen. Jeder hat das praktisch?
Ich habe mehrere Methoden versucht, darunter die Curl-Methode, aber sie funktionieren nicht für mich. Dieser funktioniert, danke !! –
Sie könnten curl verwenden. Setzen Sie einfach die Curl-Option CURLOPT_NOBODY auf True. Dies wird Körperinformationen überspringen und nur den Kopf bekommen (also auch http-Code). Dann könnten Sie die CURLOPT_FAILONERROR verwenden diesen ganzen Prozess in eine Wahr/Falsch-Typprüfung an dieser Stelle
Es ist wahrscheinlich ein Mute-Punkt zu drehen, aber das funktioniert für mich:
function is_webfile($webfile)
{
$fp = @fopen($webfile, "r");
if ($fp !== false)
fclose($fp);
return($fp);
}
Versuchen Sie, den At-Operator zu vermeiden. –
@ TörökGábor definitiv ein guter Vorschlag, aber nicht auf Punkt - Handbuch: 'Wenn das Öffnen fehlschlägt, wird ein Fehler der Ebene E_WARNING generiert. Sie können @ verwenden, um diese Warnung zu unterdrücken. –
function checkRemoteFile($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
// don't download content
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
if($result !== FALSE)
{
return true;
}
else
{
return false;
}
}
- > das ist der schnellste Weg, wenn Ihr Host
Ich denke, das ist die beste Antwort auf die Frage. Da die Option CURLOPT_NOBODY auf "true" gesetzt ist, ist dies sehr schnell. – markus
Für mich liefert diese Funktion immer true, auch wenn ich falsche URL des Bildes zur Verfügung stelle. – Devnegikec
In meinem Fall (Expedia, 10 + Bilder in einer Schleife), "True == file_get_contents ($ imgurl, 0, null, 0,1)" war schneller als curl – Jeffz
curl unterstützt, können Sie getimagesize()
Kredit verwenden: http://junal.wordpress.com/2008/07/22/checking-if-an-image-url-exist/
Dies funktioniert auch nicht. Verschwende deine Zeit nicht mit diesem Code. – Devnegikec
Es tut. Siehe oben @ mohsins Antwort. – voidstate
Verwendung getimagesize() Methode wie folgt
$external_link = ‘http://www.example.com/example.jpg’;
if (@getimagesize($external_link)) {
echo “image exists “;
} else {
echo “image does not exist “;
}
mit Abstand beste Antwort – danyo
Direkt von http://php.net/manual/en/function.getimagesize.php - "Verwenden Sie nicht getimagesize(), um zu überprüfen, ob eine bestimmte Datei ein gültiges Bild ist. Verwenden Sie eine speziell entwickelte Lösung wie zum Beispiel die Erweiterung Fileinfo. " Diese Methode lädt die Datei herunter und ist schlechter als jede Methode, die einfach über den HEAD –
To @ TimRamsey's Kommentar überprüfen kann, kommt das Problem von Nicht-Image-Dateien, so validieren Sie den Dateityp ist ein Bild, das Sie in Ordnung sein sollte. Elegante Lösung übrigens. – Praesagus
- 1. PHP: überprüfen, ob Bild existiert (Methoden)
- 2. Überprüfen, ob Bild in Typoskript existiert
- 3. Überprüfen Sie, ob das Bild existiert ohne Fehlermeldung
- 4. Überprüfen, ob Fragment existiert
- 5. Überprüfen Sie, ob der WCF-Dienst existiert
- 6. Überprüfen Sie, ob char in Java existiert
- 7. Überprüfen Sie, ob die Website existiert
- 8. Überprüfen Sie, ob eine Klassenkonstante existiert
- 9. Überprüfen Sie, ob eine Remote-Datei existiert
- 10. Knoten - Überprüfen Sie, ob ein Verzeichnis existiert
- 11. Wie überprüfen Sie, ob Datensatz existiert
- 12. Überprüfen Sie, ob eine SQL-Tabelle existiert
- 13. Überprüfen Sie, ob die Tabelle existiert
- 14. Überprüfen Sie, ob eine Klasse existiert
- 15. Überprüfen Sie, ob Modellfeld in Django existiert
- 16. jQuery überprüfen, ob onClick existiert auf Element
- 17. ngIf überprüfen, ob Klasse existiert auf Element
- 18. Mysql - Überprüfen, ob Zeile existiert
- 19. VimL: Überprüfen, ob Funktion existiert
- 20. Überprüfen, ob ein Registrierungsschlüssel existiert
- 21. Überprüfen, ob die Position existiert
- 22. Überprüfen, ob ein Element existiert
- 23. Überprüfen Sie, ob Verzeichnis existiert auf dem FTP-Server
- 24. Überprüfen Sie, ob die Datei auf einer anderen Website existiert
- 25. Überprüfen Sie, ob URL existiert oder nicht auf Server
- 26. Überprüfen Sie, ob die App auf dem Gerät existiert
- 27. Überprüfen Sie, ob ein Verzeichnis auf Android SD-Karte existiert
- 28. überprüfen, ob der Wert existiert
- 29. Überprüfen, ob ein Datenrahmen existiert
- 30. Überprüfen, ob eine Formulareingabe existiert
Dupe? http://stackoverflow.com/questions/981954/how-can-one-check-to-see-if-a-remote-file-exists-using-php –
Ich würde sagen Duplizierung –