交換 :
in_array($it->getSubPath(), $file["exclude-directories"])
次のようなもので:
!in_array_beginning_with($it->getSubPath(), $file["exclude-directories"])
そして、関数を実装します:
function in_array_beginning_with($path, $array) {
foreach ($array as $begin) {
if (strncmp($path, $begin, strlen($begin)) == 0) {
return true;
}
}
return false;
}
しかし、それは非常に良い方法ではありません。なぜなら、それらが非常に大きくて深い場合でも、役に立たないディレクトリに再帰的に入るからです。あなたの場合、古い学校の再帰関数を実行してディレクトリを読み取ることをお勧めします。
<?php
function directory_reader($dir, array $ignore = array (), array $deeps = array ())
{
array_push($deeps, $dir);
$fulldir = implode("/", $deeps) . "/";
if (is_dir($fulldir))
{
if (($dh = opendir($fulldir)) !== false)
{
while (($file = readdir($dh)) !== false)
{
$fullpath = $fulldir . $file;
if (in_array($fullpath, $ignore)) {
continue ;
}
// do something with fullpath
echo $fullpath . "<br/>";
if (is_dir($fullpath) && (strcmp($file, '.') != 0) && (strcmp($file, '..') != 0))
{
directory_reader($file, $ignore, $deeps);
}
}
closedir($dh);
}
}
array_pop($deeps);
}
しようとするとdirectory_reader(".", array("aDirectoryToIngore"))
、まったく読み込まれません。