PHP: Как проверить, существует ли файл изображения?

Мне нужно увидеть, существует ли определенное изображение на моем cdn.

Я пробовал следующее и не работает:

if (file_exists(http://www.example.com/images/$filename)) {
    echo "The file exists";
} else {
    echo "The file does not exist";
}

Даже если изображение существует или не существует, оно всегда говорит "Файл существует". Я не уверен, почему он не работает...

Ответ 1

Вам нужно имя файла в кавычках как минимум (как строка):

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

Кроме того, убедитесь, что $filename правильно проверена. И тогда это будет работать только тогда, когда allow_url_fopen активируется в вашей конфигурации PHP

Ответ 2

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

Это не сработало для меня. То, как я это делал, это использовать getimagesize.

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

if (@getimagesize($src)) {

Обратите внимание, что "@" будет означать, что если изображение не существует (в этом случае функция обычно выдает ошибку: getimagesize(http://www.mydomain.com/images/filename.png) [function.getimagesize]: failed), она вернет false.

Ответ 3

Ну, file_exists не говорит, существует ли файл, он говорит, что существует путь. ⚡⚡⚡⚡⚡⚡⚡

Итак, чтобы проверить, является ли это файлом, вы должны использовать is_file вместе с file_exists чтобы узнать, действительно ли файл находится за ним, иначе file_exists вернет true для любого существующего пути.

Вот функция, которую я использую:

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

Ответ 4

Попробуйте вот так:

$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";
}

Ответ 5

Сначала вам нужно понять: у вас нет файлов.
Файл является объектом файловой системы, но вы делаете свой запрос с использованием протокола HTTP, который не поддерживает файлы, а URL-адреса.

Итак, вам нужно запросить неиспользуемый файл, используя ваш браузер, и посмотреть код ответа. если это не 404, вы не можете использовать какие-либо обертки, чтобы увидеть, существует ли файл, и вы должны запросить свой cdn, используя какой-либо другой протокол, например FTP

Ответ 6

Вот простейший способ проверить, существует ли файл:

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

Ответ 7

Если файл находится в вашем локальном домене, вам не нужно указывать полный URL. Только путь к файлу. Если файл находится в другом каталоге, тогда вам нужно указать путь с помощью..

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

Часто время ".", что приведет к тому, что файл будет отображаться как не существующий, если это действительно так.

Ответ 8

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

        return 0;           
    }

Ответ 9

Существует большая разница между is_file и file_exists.

is_file возвращает true для (обычных) файлов:

Возвращает TRUE, если имя файла существует и является обычным файлом FALSE.

file_exists возвращает true для обоих файлов и каталогов:

Возвращает ИСТИНА, если файл или каталог указан по имени файла; ЛОЖЬ в противном случае.


Примечание: Также проверьте этот вопрос в стеке для получения дополнительной информации по этой теме.

Ответ 10

Вы должны использовать абсолютный путь, чтобы увидеть, существует ли файл.

$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";

}

Если вы пишете для CMS или PHP framework, то насколько я знаю, все они определили константу для корневого пути документа.

Например, WordPress использует ABSPATH, который можно использовать глобально для работы с файлами на сервере, используя ваш код, а также URL сайта.

Пример Wordpress:

$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";

}

Я проделаю лишнюю милю здесь:). Поскольку этот код не нуждался бы в большом техническом обслуживании и довольно солидный, я бы написал его с сокращенным выражением if:

$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';

Обозначение сокращенного IF объяснено:

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

Ответ 11

вы можете использовать cURL. Вы можете получить cURL только для того, чтобы дать вам заголовки, а не тело, которое могло бы сделать его быстрее. Плохой домен всегда может занять некоторое время, потому что вы будете ждать запроса на тайм-аут; вы, вероятно, можете изменить длину таймаута, используя cURL.

Вот пример:

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';   
}

Ответ 13

попробуй это:

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

Ответ 14

Прочитайте первые 5 байтов из HTTP с помощью fopen() и fread(), затем используйте это:

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

для обнаружения изображения.

Ответ 15

file_exists читает не только файлы, но и пути. поэтому, когда $filename пуст, команда будет работать так, как если бы она была написана следующим образом:

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

если каталог/images/существует, функция все равно вернет true.

Я обычно пишу это так:

// !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
}

Ответ 16

file_exists($filepath) вернет истинный результат для каталога и полного пути к файлу, поэтому это не всегда решение, когда имя файла не передается.

is_file($filepath) вернет true только для полностью файловых путей

Ответ 17

Если вы используете завиток, вы можете попробовать следующее script:

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;
}

}

Ссылка URL: https://hungred.com/how-to/php-check-remote-email-url-image-link-exist/

Ответ 18

вам нужен путь к серверу с файлами_exists

например

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