3

RecursiveDirectoryIterator と RecursiveIteratorIterator を使用して、PHP で再帰的にディレクトリを一覧表示しようとしていますが、実際には、いくつかのディレクトリとファイルを無視する必要があります。

これは私がこれまでに持っているものです..

// Define here the directory you have platform installed.
//
$path = 'testing';

// List of directories / files to be ignored.
//
$ignore_new = array(
# Directories
#
'.git',
'testing/dir1',
'testing/dir2',
'testing/dir3',
'testing/dir8',
'public',

# Files
#
'.gitignore',
'.gitmodules',
'.CHANGELOG.md',
'.README.md',
);


$ite = new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS);
foreach (new RecursiveIteratorIterator($ite) as $filename => $object)
{
    echo $filename . '<br />';
}

ディレクトリ/ファイルが配列内にあるかどうかを確認するさまざまな方法を試しましたが、機能しないか、ディレクトリが完全に無視されません...

これはディレクトリ構造の例です

testing\
testing\.git
testing\.git\files & directories
testing\testing\dir1
testing\testing\dir2
testing\testing\dir3
testing\testing\dir8
testing\.gitignore
testing\.gitmodules
testing\CHANGELOG.md
testing\README.md

これは可能ですか、それともPHPでディレクトリ/ファイルを再帰的にリストするために昔ながらの方法を使用する必要がありますか?

ありがとう !

4

2 に答える 2

3

Full Pathファイルとフォルダを組み合わせるので、常に使用する必要があります

$path = __DIR__;

// List of directories / files to be ignored.
//
$ignoreDir = array('1.MOV.xml','.git','testing/dir1','testing/dir2','testing/dir3','testing/dir8','public');

/**
 * Quick patch to add full path to Ignore
 */
$ignoreDir = array_map(function ($var) use($path) {
    return $path . DIRECTORY_SEPARATOR . $var;
}, $ignoreDir);

$ite = new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS);
foreach ( new RecursiveIteratorIterator($ite) as $filename => $object ) {

    if (in_array($filename, $ignoreDir))
        continue;

    echo $filename . '<br />';
}
于 2012-10-08T17:42:35.230 に答える