PHP файл существует - PullRequest
       3

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

0 голосов
/ 10 августа 2011

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

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

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

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

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

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

спасибо ...

Ответы [ 4 ]

1 голос
/ 10 августа 2011

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

0 голосов
/ 10 августа 2011

Если у 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#ini.allow-url-fopen).

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

Я предлагаю использовать

<?
$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));
}

?>
0 голосов
/ 10 августа 2011

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

В документации указано:

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

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

0 голосов
/ 10 августа 2011

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

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