Работа с каталогами в 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");
        ?>

КККонстантин Кондрусинавтор статьи «PHP Parsing Directories»

Пожалуйста, оставляйте свои мнения по текущей теме материала. Мы крайне благодарны вам за ваши комментарии, дизлайки, отклики, подписки, лайки!