Opendir: примеры (PHP)
opendir(string $directory, ?resource $context = null): resource|falseФункция opendir открывает поток директории для последующего чтения её содержимого. Она применяется для итерации по файлам и папкам внутри указанного пути.
Функция принимает два параметра:
- directory (string) – обязательный. Путь к открываемой директории.
- context (resource) – опциональный. Контекст потока, создаваемый функцией stream_context_create().
В случае успеха возвращает ресурс (resource) потока директории. В случае неудачи возвращает false и генерирует ошибку уровня E_WARNING.
$dir = opendir('/path/to/directory');
if ($dir) {
echo "Директория успешно открыта";
closedir($dir);
} else {
echo "Ошибка открытия директории";
}Директория успешно открыта
$context = stream_context_create([]);
$dir = opendir('/path/to/directory', $context);
while (($file = readdir($dir)) !== false) {
echo $file . "\n";
}
closedir($dir);. .. file1.txt image.jpg subdirectory
В PHP существуют альтернативные способы работы с директориями:
Сразу возвращает массив всех файлов и папок в директории. Удобен для получения полного списка без ручного чтения через цикл.
Предоставляют объектно-ориентированный интерфейс для работы с файловой системой. Поддерживают фильтрацию и рекурсивный обход через RecursiveDirectoryIterator.
Позволяет искать файлы по шаблону. Возвращает массив путей, соответствующих заданному шаблону.
$dir = opendir('/несуществующий/путь');
if ($dir === false) {
echo "Директория не найдена";
}Warning: opendir(/несуществующий/путь): failed to open dir: No such file or directory Директория не найдена
$dir = opendir('/root');
if ($dir === false) {
echo "Доступ запрещен";
}Warning: opendir(/root): failed to open dir: Permission denied Доступ запрещен
$dir = opendir(123); // Число вместо строкиWarning: opendir(123): failed to open dir: No such file or directory
В PHP 8.0 существенных изменений в работе opendir не было. Функция сохраняет обратную совместимость.
Важное изменение произошло в PHP 7.0, где обработка ошибок стала более строгой. Некорректный тип аргумента теперь всегда вызывает предупреждение.
function listDirRecursive($path) {
$dir = opendir($path);
while (($entry = readdir($dir)) !== false) {
if ($entry == '.' || $entry == '..') continue;
$fullPath = $path . '/' . $entry;
echo $fullPath . "\n";
if (is_dir($fullPath)) {
listDirRecursive($fullPath);
}
}
closedir($dir);
}
listDirRecursive('/path/to/directory');/path/to/directory/file1.txt /path/to/directory/subdirectory /path/to/directory/subdirectory/file2.txt
$dir = opendir('.');
$images = [];
while (($file = readdir($dir)) !== false) {
if (preg_match('/\.(jpg|png|gif)$/i', $file)) {
$images[] = $file;
}
}
closedir($dir);
print_r($images);Array
(
[0] => image.jpg
[1] => photo.png
)$context = stream_context_create([
'ftp' => [
'overwrite' => true
]
]);
$dir = opendir('ftp://user:pass@example.com/', $context);
while (($file = readdir($dir)) !== false) {
echo $file . "\n";
}
closedir($dir);import os
files = os.listdir('/path/to/directory')
for file in files:
print(file)file1.txt image.jpg subdirectory
const fs = require('fs');
fs.readdir('/path/to/directory', (err, files) => {
if (err) throw err;
files.forEach(file => console.log(file));
});MySQL не предоставляет прямых функций для чтения файловой системы с целью безопасности.