PHP: Как проверить, существует ли файл изображения? - PullRequest
91 голосов
/ 03 ноября 2011

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

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

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

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

Ответы [ 19 ]

118 голосов
/ 03 ноября 2011

Необходимо указать имя файла в кавычках как минимум (в виде строки):

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

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

102 голосов
/ 28 февраля 2013
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.

13 голосов
/ 07 ноября 2013

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

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

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

function fileExists($filePath)
{
      return is_file($filePath) && file_exists($filePath);
}
12 голосов
/ 03 ноября 2011

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

$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";
}
9 голосов
/ 29 апреля 2016

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

if(is_file($filename)){
    return true; //the file exist
}else{
    return false; //the file does not exist
}
8 голосов
/ 03 ноября 2011

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

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

7 голосов
/ 28 октября 2013

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

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

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

6 голосов
/ 19 марта 2013
public static function is_file_url_exists($url) {
        if (@file_get_contents($url, 0, NULL, 0, 1)) {
            return 1;
        }

        return 0;           
    }
3 голосов
/ 15 апреля 2016

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

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

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

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

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


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

2 голосов
/ 29 марта 2016

вы можете использовать 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';   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...