PHP: как проверить, существует ли файл изображения?
Мне нужно посмотреть, существует ли определенное изображение на моем cdn.
Я пробовал следующее, И это не работает:
if (file_exists(http://www.example.com/images/$filename)) {
echo "The file exists";
} else {
echo "The file does not exist";
}
даже если изображение существует или не существует, он всегда говорит "файл существует". Я не уверен, почему это не работает...
18 ответов:
вам нужно имя файла в кавычках по крайней мере (как строка):
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) он вернет 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
вот самый простой способ проверить, существует ли файл:
if(is_file($filename)){ return true; //the file exist }else{ return false; //the file does not exist }
Если файл находится в вашем локальном домене, вам не нужно ставить полный URL. Только путь к файлу. Если файл находится в другом каталоге, то вам необходимо в начале пути "."
$file = './images/image.jpg'; if (file_exists($file)) {}часто "."остановлено, что приведет к тому, что файл будет отображаться как несуществующий, когда он на самом деле это делает.
public static function is_file_url_exists($url) { if (@file_get_contents($url, 0, NULL, 0, 1)) { return 1; } return 0; }
есть большая разница между
is_fileиfile_exists.
is_fileвозвращает true для (регулярные) файлы:возвращает правда если filename существует и является обычным файлом, ложные в противном случае.
file_existsвозвращает true для обоих файлов и каталогов:возвращает правда если файл или каталог, заданный параметром filename, существует; ложные в противном случае.
Примечание:проверить тоже этот вопрос stackoverflow для получения дополнительной информации по этой теме.
вы должны использовать абсолютный путь, чтобы увидеть, если файл существует.
$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"; }Я собираюсь лишнюю милю здесь :). Потому что этот код не понадобится много обслуживание и довольно солидное, я бы написал его с помощью стенографии, если заявление:
$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';Стенография, если заявление объяснил:
$stringVariable = ($trueOrFalseComaprison > 0)?'String if true':'String if false';
вы можете использовать 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_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));для обнаружения изображения.
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 только для полных путей к файлам
Если вы используете curl, вы можете попробовать следующий скрипт:
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/
вам нужен путь к серверу с file_exists
if (file_exists('/httpdocs/images/'.$filename)) {echo 'File exist'; }
Comments