3

私は次のようなディレクトリ構造を持っています:

/ 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、ネイト

4

3 に答える 3

5

ファイルはこれらのディレクトリにあり、scandirは指定されたパスのコンテンツのみを表示しますが、再通貨は表示されないため、すべてが正しいです。

于 2012-11-26T01:35:49.243 に答える
3

Scandirは再帰的に機能しません。入力されたパスのみをスキャンします。

ファイルシステムをより深くスキャンするScandirRecurrsive関数

于 2012-11-26T01:46:16.903 に答える
2

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);
}
?>
于 2012-11-26T08:33:03.657 に答える