PHP читает подкаталоги и просматривает файлы как?

Мне нужно создать цикл через все файлы в подкаталогах. Не могли бы вы помочь мне структурировать мой код следующим образом:

$main = "MainDirectory"; loop through sub-directories { loop through filels in each sub-directory { do something with each file } }; 

Можете ли вы помочь, плз?

Solutions Collecting From Web of "PHP читает подкаталоги и просматривает файлы как?"

Используйте RecursiveDirectoryIterator вместе с RecursiveIteratorIterator.

 $di = new RecursiveDirectoryIterator('path/to/directory'); foreach (new RecursiveIteratorIterator($di) as $filename => $file) { echo $filename . ' - ' . $file->getSize() . ' bytes <br/>'; } 

Вероятно, вы захотите использовать для этого рекурсивную функцию, если ваши подкаталоги имеют под-подкаталоги

 $main = "MainDirectory"; function readDirs($main){ $dirHandle = opendir($main); while($file = readdir($dirHandle)){ if(is_dir($main . $file) && $file != '.' && $file != '..'){ readDirs($file); } else{ //do stuff } } } 

не тестировал код, но это должно быть близко к тому, что вы хотите.

Мне нравится glob с его подстановочными знаками:

 foreach (glob("*/*.txt") as $filename) { echo "$filename\n"; } 

Детали и более сложные сценарии.

Но если у вас сложная структура папок, то RecursiveDirectoryIterator окончательно является решением.

Вам нужно добавить путь к вашему рекурсивному вызову.

 function readDirs($path){ $dirHandle = opendir($path); while($item = readdir($dirHandle)) { $newPath = $path."/".$item; if(is_dir($newPath) && $item != '.' && $item != '..') { echo "Found Folder $newPath<br>"; readDirs($newPath); } else{ echo '&nbsp;&nbsp;Found File or .-dir '.$item.'<br>'; } } } $path = "/"; echo "$path<br>"; readDirs($path); 

Давай, сначала попробуй!

Что вам нужно:

 scandir() is_dir() 

и, конечно, foreach

http://php.net/manual/en/function.is-dir.php

http://php.net/manual/en/function.scandir.php

Другое решение для чтения с подкаталогами и подфайлами (установить правильное имя папки):

 <?php $path = realpath('samplefolder/yorfolder'); foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $filename) { echo "$filename <br/>"; } ?> 
  <?php ini_set('max_execution_time', 300); // increase the execution time of the file (in case the number of files or file size is more). class renameNewFile { static function copyToNewFolder() { // copies the file from one location to another. $main = 'C:\xampp\htdocs\practice\demo'; // Source folder (inside this folder subfolders and inside each subfolder files are present.) $main1 = 'C:\xampp\htdocs\practice\demomainfolder'; // Destination Folder $dirHandle = opendir($main); // Open the source folder while ($file = readdir($dirHandle)) { // Read what's there inside the source folder if (basename($file) != '.' && basename($file) != '..') { // Ignore if the folder name is '.' or '..' $folderhandle = opendir($main . '\\' . $file); // Open the Sub Folders inside the Main Folder while ($text = readdir($folderhandle)) { if (basename($text) != '.' && basename($text) != '..') { // Ignore if the folder name is '.' or '..' $filepath = $main . '\\' . $file . '\\' . $text; if (!copy($filepath, $main1 . '\\' . $text)) // Copy the files present inside the subfolders to destination folder echo "Copy failed"; else { $fh = fopen($main1 . '\\' . 'log.txt', 'a'); // Write a log file to show the details of files copied. $text1 = str_replace(' ', '_', $text); $data = $file . ',' . strtolower($text1) . "\r\n"; fwrite($fh, $data); echo $text . " is copied <br>"; } } } } } } static function renameNewFileInFolder() { //Renames the files into desired name $main1 = 'C:\xampp\htdocs\practice\demomainfolder'; $dirHandle = opendir($main1); while ($file = readdir($dirHandle)) { if (basename($file) != '.' && basename($file) != '..') { $filepath = $main1 . '\\' . $file; $text1 = strtolower($filepath); rename($filepath, $text1); $text2 = str_replace(' ', '_', $text1); if (rename($filepath, $text2)) echo $filepath . " is renamed to " . $text2 . '<br/>'; } } } } renameNewFile::copyToNewFolder(); renameNewFile::renameNewFileInFolder(); ?>