Is readable: примеры (PHP)

Руководство по применению is_readable для проверки файлов
Раздел: Работа с файловой системой
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)); // false
bool(true)
bool(false)

Изменения в версиях PHP

В PHP 5.1.0 функция начала возвращать true для директорий, если они доступны для чтения. В PHP 5.0.0 стала работать с оболочками URL (если включено allow_url_fopen). В PHP 8.0.0 параметр $filename теперь ожидает строку (string); передача других типов вызывает фатальную ошибку TypeError.

Расширенные примеры

Проверка нескольких файлов
Пример php
$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
)
Использование с include
Пример php
$configFile = 'settings.php';
if (is_readable($configFile)) {
include $configFile;
} else {
die('Конфигурационный файл не найден или недоступен.');
}
Работа с URL

При включенной опции allow_url_fopen можно проверять доступность удаленных ресурсов:

Пример php
ini_set('allow_url_fopen', 1);
$url = 'https://example.com/file.txt';
var_dump(is_readable($url));
bool(true)
Рекурсивная проверка директории
Пример php
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('.'));

Аналоги в других языках

Python

Используется os.access(path, os.R_OK):

import os
result = os.access('/path/to/file', os.R_OK)
print(result)
True
JavaScript (Node.js)

Применяются методы 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('Файл недоступен');
}
Файл доступен
MySQL

Прямого аналога нет, но для чтения файлов используется функция LOAD_FILE(), которая возвращает NULL при отсутствии прав.

PHP is_readable function comments

En
Is readable Tells whether a file exists and is readable