php scandir()没有显示文件 - 只显示目录

时间:2012-11-26 01:28:00

标签: php scandir

我的目录结构如下:

  

/ files
  / files / 001
  /files/001/addfile.php
  / files / 002
  /files/002/deletefile.php
  / files / 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, 内特

3 个答案:

答案 0 :(得分:5)

您的文件位于这些目录中,scandir只显示指定路径的内容,但没有任何重复性,因此一切正确。

答案 1 :(得分:3)

Scandir无法递归工作。它只扫描输入的路径。

Scandir Recurrsive function to scan deeper into the file system

答案 2 :(得分:2)

您可以将RecursiveIteratorIterator用于子目录列表

的get目录

以下是使用iterator清空目录的方法:

<?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);
}
?>