4

重複の可能性:
フォルダの表示とそれらのフォルダのリンクの作成

RecursiveDirectoryIterator を使用して単純なファイル ブラウザを作成しようとしていますが、理解できないようです...何か助けてください。

$cwd = '/path/to/somewhere';
if(isset($_GET['path']) && is_dir($cwd.$_GET['path'])) {
    $cwd .= $_GET['path'];
}

$dir = new RecursiveDirectoryIterator($cwd);
$iter = new RecursiveIteratorIterator($dir, RecursiveIteratorIterator::SELF_FIRST);
while($iter->valid()) {
    // skip unwanted directories
    if(!$iter->isDot()) {
        if($iter->isDir()) {
            // output linked directory along with the number of files contained within
            // for example: some_folder (13)
        } else {
            // output direct link to file
        }
    }
    $iter->next();
}

これが最善のアプローチかどうかはわかりませんが、RecursiveDirectoryIterator は opendir() メソッドと glob() メソッドの両方よりも高速であるという印象を受けています。

4

1 に答える 1

10

SELF_FIRSTCHILD_FIRSTは関係ありませんがRecursiveDirectoryIteratorRecursiveIteratorIterator

あなたが実行する場合

$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir), RecursiveIteratorIterator::SELF_FIRST );

foreach ( $iterator as $path ) {
    if ($path->isDir()) {
        print($path->__toString() . PHP_EOL);
    } else {
        print($path->__toString() . PHP_EOL);
    }

あなたは得るだろう

...\htdocs\lab\stockoverflow\css
...\htdocs\lab\stockoverflow\css\a.css
...\htdocs\lab\stockoverflow\css\b.css
...\htdocs\lab\stockoverflow\css\c.css
...\htdocs\lab\stockoverflow\css\css.php
...\htdocs\lab\stockoverflow\css\css.run.php

に変更するとRecursiveIteratorIterator::CHILD_FIRST

...\htdocs\lab\stockoverflow\css\a.css
...\htdocs\lab\stockoverflow\css\b.css
...\htdocs\lab\stockoverflow\css\c.css
...\htdocs\lab\stockoverflow\css\css.php
...\htdocs\lab\stockoverflow\css\css.run.php
...\htdocs\lab\stockoverflow\css

違いは現在のフォルダーの位置にあることがわかりますか

于 2012-09-30T14:36:38.257 に答える