В предыдущей главе мы узнали, как работать с файлами в PHP. Точно так же PHP также позволяет вам работать с каталогами в файловой системе, например, вы можете открыть каталоги, читать содержимое, создавать или удалять каталоги, перечислить все файлы в каталоге и так далее.

Создание нового каталога с помощью PHP-функции mkdir()

Вы можете создать новый пустой каталог, вызвав PHP-функцию mkdir(), указав путь и имя каталога, который будет создан, как показано в примере ниже:

<?php
// Путь к каталогу
$dir = "testdir";
 
// Проверяем наличие каталога
if(!file_exists($dir)){
    // Попытка создать каталог
    if(mkdir($dir)){
        echo "Directory created successfully.";
    } else{
        echo "ERROR: Directory could not be created.";
    }
} else{
    echo "ERROR: Directory already exists.";
}
?>

Чтобы функция mkdir() работала, родительские каталоги в параметре пути к каталогу должны уже существовать, например, если вы укажете путь к каталогу как testdir/subdir, тогда должен существовать testdir, иначе PHP сгенерирует ошибку.

Копирование файлов из одного места в другое с помощью PHP-функции copy()

Вы можете скопировать файл из одного места в другое, вызвав PHP-функцию copy() с исходным и конечным путями файла в качестве аргументов. Если целевой файл уже существует, он будет перезаписан. Вот пример, который создает копию файла example.txt в папке резервного копирования (backup).

<?php
// Путь к исходному файлу
$file = "example.txt";
 
// Путь к конечному файлу
$newfile = "backup/example.txt";
 
// Проверяем наличие файла
if(file_exists($file)){
    // Пытаемся скопировать файл
    if(copy($file, $newfile)){
        echo "File copied successfully.";
    } else{
        echo "ERROR: File could not be copied.";
    }
} else{
    echo "ERROR: File does not exist.";
}
?>

Чтобы этот пример работал, целевой каталог, который является резервной копией и исходный файл, то есть example.txt, должны уже существовать; в противном случае PHP выдаст ошибку.

Список всех файлов в каталоге с помощью PHP-функции scandir()

Вы можете использовать PHP-функцию scandir() для вывода списка файлов и каталогов внутри указанного пути.

Теперь мы собираемся создать специальную функцию, которая рекурсивно перечислит все файлы в каталоге с помощью PHP. Этот сценарий будет полезен, если вы работаете с глубоко вложенной структурой каталогов.

<?php
// Определяем функцию для вывода файлов в каталог
function outputFiles($path){
    // Проверяем, существует ли каталог
    if(file_exists($path) && is_dir($path)){
        // Сканируем файлы в этом каталоге
        $result = scandir($path);
        
        // Отфильтруем текущий (.) и родительский (..) каталоги
        $files = array_diff($result, array('.', '..'));
        
        if(count($files) > 0){
            // Цикл через перенастроенный массив
            foreach($files as $file){
                if(is_file("$path/$file")){
                    // Печатаем filename
                    echo $file . "<br>";
                } else if(is_dir("$path/$file")){
                    // Рекурсивно вызываем функцию, если каталоги найдены
                    outputFiles("$path/$file");
                }
            }
        } else{
            echo "ERROR: No files found in the directory.";
        }
    } else {
        echo "ERROR: The directory does not exist.";
    }
}
 
// Вызываем функцию
outputFiles("mydir");
?>

Список всех файлов определенного типа с помощью функции glob()

При работе с каталогом и файловой структурой иногда вам может потребоваться найти определенные типы файлов в каталоге, например, перечислить только файлы .text или.png. Вы можете легко сделать это с помощью PHP-функции glob(), который соответствует файлам на основе шаблона.

Код PHP в следующем примере будет искать в каталоге документов и перечислять все файлы с расширением .text. Поиск в подкаталогах не выполняется.

<?php
/* В цикле ищем совпадающие файлы */
foreach(glob("documents/*.txt") as $file){
    echo basename($file) . " (size: " . filesize($file) . " bytes)" . "<br>";
}
?>

Функцию glob() также можно использовать для поиска всех файлов в каталоге или его подкаталогах. Функция, определенная в следующем примере, будет рекурсивно перечислять все файлы в каталоге, как мы это делали в предыдущем примере с функцией scandir().

<?php
// Определяем функцию для вывода файлов в каталог
function outputFiles($path){
    // Проверяем, существует ли каталог
    if(file_exists($path) && is_dir($path)){
        // Ищем файлы в этом каталоге
        $files = glob($path ."/*");
        if(count($files) > 0){
            // Запускаем цикл
            foreach($files as $file){
                if(is_file("$file")){
                    // Печатаем имя файла
                    echo basename($file) . "<br>";
                } else if(is_dir("$file")){
                    // Рекурсивно вызывать функцию, если каталоги найдены
                    outputFiles("$file");
                }
            }
        } else{
            echo "ERROR: No such file found in the directory.";
        }
    } else {
        echo "ERROR: The directory does not exist.";
    }
}
 
// Вызываем функцию
outputFiles("mydir");
?>

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 5 / 5. Количество оценок: 1

Оценок пока нет. Поставьте оценку первым.