Intereting Posts

php scandir () не показывает файлы – только показ каталогов

У меня есть структура каталогов следующим образом:

/ файлы
/ файлов / 001
/files/001/addfile.php
/ файлов / 002
/files/002/deletefile.php
/ файлов / 003
/files/003/viewfile.php

Мой скрипт:

error_reporting(E_ALL); $directory = 'files'; $files = scandir($directory); $xml = new DOMDocument('1.0', 'UTF-8'); $xmlFiles = $xml->appendChild($xml->createElement('FILES')); if(is_dir($directory)) { print_r($files); } /*foreach($files as $file => $key) { if($file == '.' || $file == '..') { continue; } echo '$file: '.$file; if(is_dir("$directory/$file")) { $xmlDir->appendChild($xml->createElement($file)); } else { $xmlFiles->appendChild($xml->createElement('FILE', $file)); } }*/ echo $xml->saveXML(); 

Моя проблема: выходы print_r($files) :

Массив ([0] =>. [1] => .. [2] => 001 [3] => 002 [4] => 003)

Почему Scandir выводит только каталоги, а не файлы?

TIA, Nate

ваши файлы находятся в этих каталогах, а scandir показывает только содержимое указанного пути, но без какой-либо повторной обработки, поэтому все правильно.

Scandir не работает рекурсивно. Он только сканирует входной путь в него.

Scandir Recurrsive для более глубокого сканирования в файловой системе

вы можете использовать RecursiveIteratorIterator для получения каталога со списком подкаталогов

Вот как очистить каталог с помощью итератора:

 <?php function empty_dir($dir) { $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir), RecursiveIteratorIterator::CHILD_FIRST); foreach ($iterator as $path) { if ($path->isDir()) { // do something with directory // rmdir($dir); } else { //doo something with files // unlink($path->__toString()); } } // rmdir($dir); } ?>