Is readable: примеры (PHP)
is_readable(string $filename): boolОсновная информация о функции is_readable
Функция is_readable() проверяет существование файла или директории и возможность их чтения текущим пользователем. Она применяется для проверки прав доступа перед операциями чтения файла, такими как file_get_contents(), fopen() в режиме чтения, или включением файла через include.
Функция принимает один обязательный параметр:
- $filename (string) - путь к проверяемому файлу или директории. Может быть абсолютным или относительным.
Возвращаемое значение: true, если файл/директория существует и доступен для чтения, иначе false.
Примеры использования is_readable
Проверка существующего файла с правами на чтение:
$file = 'config.txt';
if (is_readable($file)) {
echo "Файл можно прочитать.";
} else {
echo "Файл отсутствует или недоступен для чтения.";
}Файл можно прочитать.
Проверка несуществующего файла:
$result = is_readable('nonexistent.txt');
var_dump($result);bool(false)
Функция также работает с директориями:
$dir = '/var/log';
var_dump(is_readable($dir));bool(true)
Похожие функции в PHP
- file_exists() - определяет существование файла или директории, но не проверяет права доступа.
- is_file() - проверяет, является ли путь обычным файлом.
- is_dir() - проверяет, является ли путь директорией.
- fopen() с режимом 'r' - попытка открытия файла для чтения; если неудачно, файл недоступен.
is_readable() предпочтительнее, когда нужно именно проверить права чтения. Для простой проверки существования подходит file_exists(). Комбинация is_file() и is_readable() гарантирует, что путь ведет к читаемому файлу.
Типичные ошибки
На Windows функция может не корректно обрабатывать символические ссылки.
PHP может кэшировать результаты is_readable() для ускорения. Если права изменятся в процессе выполнения, это может привести к неактуальным данным. Для сброса кэша можно использовать clearstatcache().
$file = 'test.txt';
var_dump(is_readable($file)); // true
// Внешнее изменение прав (например, chmod 000 test.txt)
clearstatcache(true, $file);
var_dump(is_readable($file)); // falsebool(true)
bool(false)
Изменения в версиях PHP
В PHP 5.1.0 функция начала возвращать true для директорий, если они доступны для чтения. В PHP 5.0.0 стала работать с оболочками URL (если включено allow_url_fopen). В PHP 8.0.0 параметр $filename теперь ожидает строку (string); передача других типов вызывает фатальную ошибку TypeError.
Расширенные примеры
$files = ['file1.txt', 'file2.txt', 'file3.txt'];
$readable = [];
foreach ($files as $file) {
if (is_readable($file)) {
$readable[] = $file;
}
}
print_r($readable);Array
(
[0] => file1.txt
[1] => file3.txt
)
$configFile = 'settings.php';
if (is_readable($configFile)) {
include $configFile;
} else {
die('Конфигурационный файл не найден или недоступен.');
}При включенной опции allow_url_fopen можно проверять доступность удаленных ресурсов:
ini_set('allow_url_fopen', 1);
$url = 'https://example.com/file.txt';
var_dump(is_readable($url));bool(true)
function findReadableFiles($dir) {
$readable = [];
if (is_readable($dir)) {
$items = scandir($dir);
foreach ($items as $item) {
if ($item != '.' && $item != '..') {
$path = $dir . '/' . $item;
if (is_readable($path)) {
$readable[] = $path;
}
}
}
}
return $readable;
}
print_r(findReadableFiles('.'));Аналоги в других языках
Используется os.access(path, os.R_OK):
import os
result = os.access('/path/to/file', os.R_OK)
print(result)True
Применяются методы fs.accessSync(path, fs.constants.R_OK) или асинхронный fs.access():
const fs = require('fs');
try {
fs.accessSync('file.txt', fs.constants.R_OK);
console.log('Файл доступен');
} catch (err) {
console.log('Файл недоступен');
}Файл доступен
Прямого аналога нет, но для чтения файлов используется функция LOAD_FILE(), которая возвращает NULL при отсутствии прав.