Работа с каталогами в PHP
Как происходит работа с каталогами в PHP? Можно создать новую папку с помощью PHP функции mkdir() с указанным путем и названием, как показано в приведенном ниже примере. Затем мы познакомимся с функцией PHP scandir().
Пример:
<?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
// Исходный путь файла
$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.";
}
?>
Как получить в PHP список файлов в папке
Можно использовать PHP scandir(), чтобы получить список всех файлов, которые содержит папка.
Пример:
<?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 "ERROR: No files found in the directory.";
}
} else {
echo "ERROR: The directory does not exist.";
}
}
// Название имени файла
outputFiles("mydir");
?>
Список файлов определенного типа
При работе с папками и файлами может потребоваться найти файлы определенных типов. Например, только файлы .text или .png. Для этого предназначена функция glob(). которая осуществляет поиск файлов по заданному шаблону.
В приведенном ниже примере PHP найдет в папке все файлы с расширением .text. Данный пример не будет искать подкаталоги, как и PHP scandir().
Пример:
<?php
/* Поиск каталога и цикл по возвращенному массиву, содержащему обозначенные файлы */
foreach(glob("documents/*.txt") as $file){
echo basename($file) . " (size: " . filesize($file) . " bytes)" . "<br>";
}
?>
Функция glob() также используется для нахождения всех файлов в каталоге или подкаталоге.
Пример:
<?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");
?>