English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этом руководстве вы узнаете, как использовать директории или папки с помощью 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"); ?>