it-swarm.com.de

PHP: Wie prüfe ich, ob eine Bilddatei existiert?

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 Image existiert oder nicht existiert, wird immer "Die Datei existiert" angezeigt. Ich bin nicht sicher, warum es nicht funktioniert ...

87
PaperChase

Sie benötigen mindestens den Dateinamen in Anführungszeichen (als Zeichenfolge):

if (file_exists('http://www.mydomain.com/images/'.$filename)) {
 … }

Stellen Sie außerdem sicher, dass $filename ordnungsgemäß überprüft wurde. Und dann funktioniert es nur, wenn allow_url_fopen in Ihrer PHP - Konfiguration aktiviert ist

111
knittl
if (file_exists('http://www.mydomain.com/images/'.$filename)) {}

Das hat bei mir nicht funktioniert. So wie ich es gemacht habe, war Getimagesize.

$src = 'http://www.mydomain.com/images/'.$filename;

if (@getimagesize($src)) {

Beachten Sie, dass das '@' bedeutet, wenn das Bild nicht vorhanden ist (in diesem Fall würde die Funktion normalerweise einen Fehler ausgeben: getimagesize(http://www.mydomain.com/images/filename.png) [function.getimagesize]: failed), wird false zurückgegeben.

96

Nun,file_existssagt nicht, ob eine Datei existiert, es sagt, wenn ein Pfad existiert . ⚡⚡⚡⚡⚡⚡⚡

Um zu überprüfen, ob es sich um eine Datei handelt, sollten Sieis_filezusammen mitfile_existsverwenden, um zu wissen, ob sich wirklich eine Datei hinter dem Pfad befindet. Andernfalls wirdfile_existstruefür jeden vorhandenen Pfad.

Hier ist die Funktion, die ich verwende:

function fileExists($filePath)
{
      return is_file($filePath) && file_exists($filePath);
}
13
Rizerzero

Versuchen Sie es so:

$file = '/path/to/foo.txt'; // 'images/'.$file (physical path)

if (file_exists($file)) {
    echo "The file $file exists";
} else {
    echo "The file $file does not exist";
}
12
pinaldesai

So überprüfen Sie am einfachsten, ob eine Datei vorhanden ist:

if(is_file($filename)){
    return true; //the file exist
}else{
    return false; //the file does not exist
}
9
jfindley

Eine Sache, die Sie zuerst verstehen müssen: Sie haben keine Dateien .
Eine Datei ist ein Subjekt eines Dateisystems, aber Sie stellen Ihre Anfrage mit dem HTTP-Protokoll, das keine Dateien außer URLs unterstützt.

Sie müssen also eine nicht vorhandene Datei über Ihren Browser anfordern und den Antwortcode anzeigen. Wenn es sich nicht um 404 handelt, können Sie keine Wrapper verwenden, um festzustellen, ob eine Datei vorhanden ist, und Sie müssen Ihre CD mit einem anderen Protokoll anfordern, beispielsweise mit FTP

8

Wenn sich die Datei in Ihrer lokalen Domäne 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 den Pfad mit "."

$file = './images/image.jpg';
if (file_exists($file)) {}

Oftmals wird das "." Wenn diese Option nicht angezeigt wird, wird die Datei als nicht vorhanden angezeigt.

7
master_gracey
public static function is_file_url_exists($url) {
        if (@file_get_contents($url, 0, NULL, 0, 1)) {
            return 1;
        }

        return 0;           
    }
6
realmag777

Es gibt einen großen Unterschied zwischen is_file und file_exists.

is_file liefert true für (reguläre) Dateien:

Gibt [~ # ~] true [~ # ~] zurück, wenn der Dateiname existiert und eine reguläre Datei ist. [ ~ # ~] false [~ # ~] sonst.

file_exists gibt true sowohl für Dateien als auch für Verzeichnisse zurück:

Gibt [~ # ~] true [~ # ~] zurück, wenn die durch filename angegebene Datei oder das angegebene Verzeichnis existiert. [~ # ~] false [~ # ~] else.


Hinweis: Überprüfen Sie auch diese Stapelüberlauf-Frage für weitere Informationen zu diesem Thema.

3
Wilt

sie können cURL verwenden. Sie können cURL dazu bringen, Ihnen nur die Kopfzeilen und nicht den Körper zu geben, wodurch es möglicherweise schneller wird. Eine fehlerhafte Domäne kann immer eine Weile dauern, da Sie darauf warten, dass die Anforderung abläuft. Sie können die Timeout-Länge wahrscheinlich mit cURL ändern.

Hier ist ein Beispiel: 

function remoteFileExists($url) {
$curl = curl_init($url);

//don't fetch the actual page, you only want to check the connection is ok
curl_setopt($curl, CURLOPT_NOBODY, true);

//do request
$result = curl_exec($curl);

$ret = false;

//if request did not fail
if ($result !== false) {
    //if request was ok, check response code
    $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);  

    if ($statusCode == 200) {
        $ret = true;   
    }
}

curl_close($curl);

return $ret;
}
$exists = remoteFileExists('http://stackoverflow.com/favicon.ico');
if ($exists) {
echo 'file exists';
} else {
   echo 'file does not exist';   
}
2
manish1706

Sie müssen den absoluten Pfad verwenden, um festzustellen, ob die Datei vorhanden ist.

$abs_path = '/var/www/example.com/public_html/images/';
$file_url = 'http://www.example.com/images/' . $filename;

if (file_exists($abs_path . $filename)) {

    echo "The file exists. URL:" . $file_url;

} else {

    echo "The file does not exist";

}

Wenn Sie für CMS oder PHP Framework schreiben, haben alle, soweit ich weiß, alle eine Konstante für den Dokumentwurzelpfad definiert. 

wordPress verwendet beispielsweise ABSPATH, das global verwendet werden kann, um mit Dateien auf dem Server zu arbeiten, die Ihren Code und die Site-URL verwenden.

Wordpress-Beispiel:

$image_path = ABSPATH . '/images/' . $filename;
$file_url = get_site_url() . '/images/' . $filename;

if (file_exists($image_path)) {

    echo "The file exists. URL:" . $file_url;

} else {

    echo "The file does not exist";

}

Ich gehe hier eine extra Meile :). Da dieser Code nicht viel Wartung erfordert und ziemlich solide ist, würde ich ihn mit der Abkürzung if-Anweisung schreiben:

$image_path = ABSPATH . '/images/' . $filename;
$file_url = get_site_url() . '/images/' . $filename;

echo (file_exists($image_path))?'The file exists. URL:' . $file_url:'The file does not exist';

Kürzel IF-Anweisung erklärt:

$stringVariable = ($trueOrFalseComaprison > 0)?'String if true':'String if false';
2

Sie können die file_get_contents-Funktion verwenden, um auf entfernte Dateien zuzugreifen. Siehe http://php.net/manual/de/function.file-get-contents.php für Details.

1
Kai

versuche dies : 

if (file_exists(FCPATH . 'uploads/pages/' . $image)) {
    unlink(FCPATH . 'uploads/pages/' . $image);
}
1
Dev_meno

Wenn Sie curl verwenden, können Sie das folgende Skript ausprobieren:

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);
if(curl_exec($ch)!==FALSE)
{
    return true;
}
else
{
    return false;
}

}

Referenz URL: https://hungred.com/how-to/php-check-remote-email-url-image-link-exist/

0
Yogi Ghorecha

sie benötigen einen Serverpfad mit file_exists

zum Beispiel

if (file_exists('/httpdocs/images/'.$filename)) {echo 'File exist'; }
0
Altravista

Lesen Sie die ersten 5 Bytes von HTTP mit fopen() und fread() und verwenden Sie dann Folgendes:

DEFINE("GIF_START","GIF");
DEFINE("PNG_START",pack("C",0x89)."PNG");
DEFINE("JPG_START",pack("CCCCCC",0xFF,0xD8,0xFF,0xE0,0x00,0x10)); 

bild erkennen. 

0
Peter

file_exists($filepath) gibt ein wahres Ergebnis für ein Verzeichnis und einen vollständigen Dateipfad zurück. Dies ist nicht immer eine Lösung, wenn kein Dateiname übergeben wird.

is_file($filepath) gibt nur für vollständige Dateipfade true zurück

0
PodTech.io

file_exists liest nicht nur Dateien, sondern auch Pfade. Wenn also $filename leer ist, würde der Befehl so ausgeführt, als wäre er so geschrieben:

file_exists("http://www.example.com/images/")

wenn das Verzeichnis/images/vorhanden ist, gibt die Funktion trotzdem true zurück.

Ich schreibe es normalerweise so:

// !empty($filename) is to prevent an error when the variable is not defined
if (!empty($filename) && file_exists("http://www.example.com/images/$filename"))
{
    // do something
}
else
{
    // do other things
}
0
dapidmini

Wenn der Pfad zu Ihrem Image relativ zum Anwendungsstamm ist, ist es besser, Folgendes zu verwenden:

function imgExists($path) {
    $serverPath = $_SERVER['DOCUMENT_ROOT'] . $path;

    return is_file($serverPath)
        && file_exists($serverPath);
}

Anwendungsbeispiel für diese Funktion:

$path = '/tmp/teacher_photos/1546595125-IMG_14112018_160116_0.png';

$exists = imgExists($path);

if ($exists) {
    var_dump('Image exists. Do something...');
}

Ich denke, es ist eine gute Idee, so etwas wie eine Bibliothek zu erstellen, um die Bildexistenz für verschiedene Situationen zu überprüfen. Oben finden Sie viele gute Antworten, mit denen Sie diese Aufgabe lösen können.

0
B. Bohdan