Ich muss sehen, ob ein bestimmtes Bild auf meiner CD vorhanden ist.
Ich habe Folgendes versucht und es funktioniert nicht:
if (file_exists(http://www.example.com/images/$filename)) {
echo "The file exists";
} else {
echo "The file does not exist";
}
Selbst wenn das Bild existiert oder nicht existiert, heißt es immer "Die Datei existiert". Ich bin mir nicht sicher, warum es nicht funktioniert ...
file_exists
sehr langsam ist, einen Remote-Standort zu erreichen.Antworten:
Sie benötigen den Dateinamen mindestens in Anführungszeichen (als Zeichenfolge):
Stellen Sie außerdem sicher, dass
$filename
es ordnungsgemäß validiert ist. Und dann funktioniert es nur, wennallow_url_fopen
es in Ihrer PHP-Konfiguration aktiviert istquelle
Das hat bei mir nicht funktioniert. So wie ich es gemacht habe, habe ich getimagesize verwendet.
Beachten Sie, dass das '@' bedeutet, dass wenn das Bild nicht existiert (in diesem Fall würde die Funktion normalerweise einen Fehler
getimagesize(http://www.mydomain.com/images/filename.png) [function.getimagesize]: failed
auslösen :), false zurückgegeben wird.quelle
@getimagesize('//path/to/image.jpg')
nicht).Nun,
file_exists
sagt nicht, ob eine Datei existiert, sondern ob ein Pfad existiert . ⚡⚡⚡⚡⚡⚡⚡Um zu überprüfen, ob es sich um eine Datei handelt, sollten Sie
is_file
zusammen mit verwenden,file_exists
um festzustellen, ob sich tatsächlich eine Datei hinter dem Pfad befindet. Andernfallsfile_exists
wirdtrue
für einen vorhandenen Pfad zurückgegeben.quelle
Versuchen Sie es so:
quelle
Hier ist der einfachste Weg, um zu überprüfen, ob eine Datei vorhanden ist:
quelle
Eine Sache, die Sie zuerst verstehen müssen: Sie haben keine Dateien .
Eine Datei ist Gegenstand eines Dateisystems , aber Sie stellen Ihre Anfrage über das HTTP-Protokoll, das keine Dateien, sondern URLs unterstützt.
Sie müssen also eine nicht vorhandene Datei mit Ihrem Browser anfordern und den Antwortcode anzeigen. Wenn es nicht 404 ist, können Sie keine Wrapper verwenden, um festzustellen, ob eine Datei vorhanden ist, und Sie müssen Ihre CDN über ein anderes Protokoll anfordern, z. B. FTP
quelle
quelle
Wenn sich die Datei in Ihrer lokalen Domain befindet, müssen Sie nicht die vollständige URL eingeben. Nur der Pfad zur Datei. Wenn sich die Datei in einem anderen Verzeichnis befindet, müssen Sie dem Pfad "."
Oftmals das "." wird weggelassen, wodurch die Datei als nicht vorhanden angezeigt wird, obwohl dies tatsächlich der Fall ist.
quelle
Es gibt einen großen Unterschied zwischen
is_file
undfile_exists
.is_file
Gibt true für (reguläre) Dateien zurück:file_exists
Gibt sowohl für Dateien als auch für Verzeichnisse true zurück:Hinweis: Weitere Informationen zu diesem Thema finden Sie auch in dieser Frage zum Stapelüberlauf .
quelle
Sie müssen den absoluten Pfad verwenden, um festzustellen, ob die Datei vorhanden ist.
Wenn Sie für ein CMS- oder PHP-Framework schreiben, haben meines Wissens alle eine Konstante für den Dokumentstammpfad definiert.
Beispielsweise verwendet WordPress ABSPATH, das global für die Arbeit mit Dateien auf dem Server unter Verwendung Ihres Codes sowie der Site-URL verwendet werden kann.
WordPress-Beispiel:
Ich gehe hier eine Extrameile :). Da dieser Code nicht viel Wartung benötigt und ziemlich solide ist, würde ich ihn als Abkürzung für if schreiben:
Kurzschrift IF-Erklärung erklärt:
quelle
Sie können cURL verwenden. Sie können cURL dazu bringen, nur die Überschriften und nicht den Text anzugeben, wodurch es möglicherweise schneller wird. Eine fehlerhafte Domain kann immer eine Weile dauern, da Sie auf das Zeitlimit für die Anforderung warten. Sie könnten wahrscheinlich die Timeout-Länge mit cURL ändern.
Hier ist ein Beispiel:
quelle
Mit dieser
file_get_contents
Funktion können Sie auf entfernte Dateien zugreifen. Weitere Informationen finden Sie unter http://php.net/manual/en/function.file-get-contents.php .quelle
Wenn Sie Curl verwenden, können Sie das folgende Skript ausprobieren:
}}
Referenz-URL: https://hungred.com/how-to/php-check-remote-email-url-image-link-exist/
Versuche dies :
quelle
Wenn der Pfad zu Ihrem Image relativ zum Anwendungsstamm ist, ist es besser, Folgendes zu verwenden:
Anwendungsbeispiel für diese Funktion:
Ich denke, es ist eine gute Idee, so etwas wie eine Bibliothek zu erstellen, um die Bildexistenz zu überprüfen, die für verschiedene Situationen anwendbar ist. Oben finden Sie viele gute Antworten, mit denen Sie diese Aufgabe lösen können.
quelle
Lesen Sie die ersten 5 Bytes von HTTP mit
fopen()
und verwenden Siefread()
dann Folgendes:Bild zu erkennen.
quelle
file_exists
liest nicht nur Dateien, sondern auch Pfade. Wenn$filename
der Befehl leer ist, wird er so ausgeführt, als ob er wie folgt geschrieben wäre:Wenn das Verzeichnis / images / vorhanden ist, wird die Funktion weiterhin zurückgegeben
true
.Normalerweise schreibe ich es so:
quelle
file_exists($filepath)
gibt ein echtes Ergebnis für ein Verzeichnis und einen vollständigen Dateipfad zurück, ist also nicht immer eine Lösung, wenn ein Dateiname nicht übergeben wird.is_file($filepath)
gibt nur true für vollständige Dateipfade zurückquelle
Sie benötigen einen Serverpfad mit file_exists
beispielsweise
quelle
Arbeitet für mich.
quelle