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

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

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

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

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

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

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

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

 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 ошибку: getimagesize(http://www.mydomain.com/images/filename.png) [function.getimagesize]: failed ), он вернет false.

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

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

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

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

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

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

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

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

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

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

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

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

 if(is_file($filename){ return true; //the file exist }else{ return false; //the file does not exist } 
 public static function is_file_url_exists($url) { if (@file_get_contents($url, 0, NULL, 0, 1)) { return 1; } return 0; } 

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

 $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 statement:

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

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

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

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

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

Возвращает TRUE, если существует файл или каталог, указанный по имени файла; FALSE в противном случае.


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

Вы можете использовать функцию file_get_contents для доступа к удаленным файлам. Подробнее см. http://php.net/manual/en/function.file-get-contents.php .

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

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

Прочтите сначала 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)); 

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

вы можете использовать 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'; } 

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 } 

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

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

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

 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/