PHP файл существует

Используя PHP мне нужно определить, существует ли файл.

Я пробовал file_exists(), но разрешения ограничены, и я не верю, что PHP может читать права доступа к файлу. Файл является фотографией и может быть просмотрен через URL.

например: http://www.seemeagain.com/users/1000002722/gallery_1312973080.jpg

Я попытался is_readable(), но я все результаты снова, это не существует.

Я также указал на функции в index.php, чтобы проверить, правильно ли я их использую, а с index.php они возвращают правильные ожидаемые результаты.

Есть ли другая функция PHP, которую я могу использовать, чтобы проверить, существует ли файл случайно или уловкой?

благодарю вас...

4 ответа

Я думаю, вы могли бы использовать file_get_contents. Он возвращает false при сбое и содержимое файла в случае успеха: http://php.net/manual/en/function.file-get-contents.php

Если вы пытаетесь проверить локальный файл:
file_exists() функция возвращает FALSE для файлов, недоступных из-за ограничений безопасного режима. Так что попробуйте это:

   function my_file_exists($dir, $file)
   {
       $ret = exec("ls ".escapeshellarg($dir)." | grep ".escapeshellarg($file));
       return (!empty($ret));
   } 

Увидеть, что file_exists не работает для меня. Коротко: file_exists будет проверять только на вашем сервере, он не используется для проверки URL-адресов. Вы можете использовать curl и т. Д. И проверить заголовок.

В документации говорится:

Начиная с PHP 5.0.0, эта функция также может использоваться с некоторыми упаковщиками URL. Обратитесь к списку поддерживаемых протоколов / оболочек, чтобы узнать, какие оболочки поддерживают семейство функций stat().

Это просто означает, что это может работать, но обычно это не так.

Если у PHP нет прав на чтение файла, вы не сможете проверить существование файла с помощью file_exists() или is_readable(), так как эти функции зависят от возможности доступа к файлу локально на вашем сервере.

Единственное решение, которое сработает, - это проверка наличия файла с использованием HTTP-запроса.

Решение Алекса с file_get_contents() является одним из способов сделать это, но вы должны проверить, если

allow_url_fopen = true

в вашем php.ini, так

file_get_contents("http://www.seemeagain.com/users/1000002722/gallery_1312973080.jpg")

разрешено получать данные из HTTP ( http://www.php.net/manual/en/filesystem.configuration.php).

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

Мое предложение заключается в использовании

<?
$headers = get_headers("http://www.seemeagain.com/users/1000002722/gallery_1312973080.jpg");

if ($headers[0] == "HTTP/1.1 200 OK")
{
    // Your file does exist
}
elseif($headers[0] == "HTTP/1.1 404 Not Found")
{
    // Your file does not exist
}
else 
{
    // Some other headers...
    highlight_string(print_r($headers,1));
}

?>
Другие вопросы по тегам