[英]PHP Scan but exclude certain folders and files
我想從路徑列表中排除一些文件和文件夾。 我為此創建了以下代碼,但它不起作用。 仍然顯示所有文件。 這可能是什么原因?
$directories = '/var/../';
$excludes = array(
'files' => array('requirements.txt', '.gitignore'),
'dirs' => array('.git', 'logs')
);
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($directories, FilesystemIterator::SKIP_DOTS),
RecursiveIteratorIterator::SELF_FIRST
);
foreach ($files as $path => $file) {
if (!in_array($file, $excludes['dirs'])) {
if (!in_array($file, $excludes['files'])) {
echo $file->getFileName() . '<br>';
}
}
}
問題是您將僅排除 dir.git,但不排除 .git 文件夾中的 .git/some-file 之類的文件
但是你可以在沒有迭代器的情況下編寫遞歸,以避免對每個文件進行困難的驗證。在這里我們不會將 go 寫入我們不喜歡的文件/目錄
<?php
function getDirContents($dir, &$excludes, &$results = array()) {
$files = scandir($dir);
foreach ($files as $key => $value) {
$path = realpath($dir . DIRECTORY_SEPARATOR . $value);
if (!is_dir($path)) {
if (!in_array($value, $excludes['files'])) {
$results[] = $path;
}
} else if ($value != "." && $value != "..") {
if (!in_array($value, $excludes['dirs'])) {
getDirContents($path, $excludes, $results);
$results[] = $path;
}
}
}
return $results;
}
$directories = '/var/../';
$excludes = array(
'files' => array('requirements.txt', '.gitignore'),
'dirs' => array('.git', 'logs')
);
var_dump(getDirContents($directories, $excludes));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.