English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Начальный учебник PHP

Дополнительный учебник PHP

PHP & MySQL

PHP справочник

Анализ каталогов PHP

В этом руководстве вы узнаете, как использовать директории или папки с помощью PHP.

Использование директорий в PHP

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

Создать новый каталог

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

<?php
//путь к каталогу
$dir = "testdir";
 
//проверка существования каталога
if(!file_exists($dir)){
    //попытка создать каталог
    if(mkdir($dir)){
        echo "Каталог успешно создан.";
    } else {
        echo "Ошибка: не удалось создать каталог.";
    }
} else {
    echo "Ошибка: каталог уже существует.";
}
?>

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

Скопировать файл из одного места в другое

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

<?php
//путь к исходному файлу
$file = "example.txt";
 
//путь к целевому файлу
$newfile = "backup/example.txt";
 
//проверка существования файла
if(file_exists($file)){
    //попытка скопировать файл
    if(copy($file, $newfile)){
        echo "Успешно скопирован файл.";
    } else {
        echo "Ошибка: не удалось скопировать файл.";
    }
} else {
    echo "Ошибка: файл не существует.";
}
?>

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

Перечислить все файлы в каталоге

Вы можете использовать функцию 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")){
                    //显示文件名
                    echo $file . "<br>";
                } else if(is_dir("$path/$file")){
                    // если найден каталог, то рекурсивно вызывается эта функция
                    outputFiles("$path/$file");
                }
            }
        } else {
            echo "ошибка: файл не найден в каталоге.";
        }
    } else {
        echo "ошибка: этот каталог не существует.";
    }
}
 
// вызов функции
outputFiles("mydir");
?>		

перечисление всех файлов определенного типа

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

В следующем примере PHP-кода будет搜 documents каталог и перечисление всех файлов с расширением .text. Он не ищет подкаталоги.

<?php
/* поисковая операция в каталоге и циклический просмотр, возвращающий массив соответствующих файлов */
foreach(glob("documents/*.txt") as $file){
    echo basename($file) . " (размер: " . filesize($file) . " байт)" . "<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 "ошибка: в каталоге не найден такой файл.";
        }
    } else {
        echo "ошибка: этот каталог не существует.";
    }
}
 
// вызов функции
outputFiles("mydir");
?>