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