Я хочу проверить, не существует ли файл. Когда функция file_exists()
возвращает false
, я не могу быть уверен, что файл не существует или у меня нет разрешения на файл.
Нет, вы, должно быть, поняли что-то не так. file_exists()
вернет TRUE
, если файл существует, и FALSE
, если нет. Это не имеет ничего общего с разрешениями этого файла.
например. файл, для которого мой сценарий не имеет разрешений на чтение, заставит file_exists
вернуть TRUE
, поскольку он существует.
Однако, если я протестирую с is_readable
для этого файла, он вернет FALSE
. У меня нет прав на чтение файла.
Пример:
$file = 'unreadable';
var_dump(file_exists($file), is_readable($file));
Выход:
bool(true)
bool(false)
Редактировать: Естественно, это связано с базовыми системными библиотеками, которые PHP использует для получения информации о существовании и разрешениях файла. Если PHP не разрешено получать статус о том, существует файл или нет, он сообщит вам, что файл не существует. Это, например, случай, если у вас есть каталог, который существует, но не доступен для чтения пользователю:
$dir = 'unreadable';
$file = $dir.'/unreadable.ext';
var_dump(file_exists($dir), is_readable($dir));
# bool(true)
# bool(false)
var_dump(file_exists($file), is_readable($file));
# bool(false)
# bool(false)
Поскольку вы хотите получить статус существования $file
, базовые разрешения не позволяют вам его получить. Поэтому файл не существует для вас. Это в равной степени правильно, и вы должны быть более точными, что вам действительно нужно выяснить. Потому что для вас файл не существует. Вот как работают разрешения на доступ к каталогам (здесь все примеры запускаются на окнах, но эти вещи настолько распространены, что они есть в каждой обычной реализации файловой системы).
Надеюсь, это проливает свет на вашу проблему.