我正在尝试从文件夹级别搜索文件,但遇到了一些问题


i am trying to search files from folder level but i am getting some issues

我用datepicker创建了一个搜索框,我的文件夹结构像data2/mysqldump/050516,在这个文件夹中我有名为:phpdev11_test1.sql.bz2的文件。我只想搜索名为"phpdev11_"、全名为"phpdev11_test1"的文件。我的代码是

$dir = $_SERVER['DOCUMENT_ROOT'].'/data2/mysqldump/';
$directory = new RecursiveDirectoryIterator($dir);
$flattened = new RecursiveIteratorIterator($directory);
$files = new RegexIterator($flattened, '#^(?:[A-Z]:)?(?:/(?!'.Trash)[^/]+)+/[^/]+'.(?:sql|bz2)$#Di');
foreach($files as $file) {
echo $file . PHP_EOL;
}

下面的代码适用于我,我已将您的正则表达式更改为:

^(?:[A-Z]:)?(?:/(?!.Trash)[^/]+)+/'.$fullName.'.(?:sql).(?:bz2)$#i

error_reporting(E_ALL);
ini_set('display_errors', true);
ini_set('display_startup_errors', true);

$_SERVER['DOCUMENT_ROOT'] = __DIR__;
// $firstName = null;
// $lastName = null;
$firstName = 'phpdev11_';
$lastName = 'test1';
$defaultNamePattern = '[^/]+?';
if ($firstName) {
    $fullName = $firstName;
} else {
    $fullName = $defaultNamePattern;
}
if ($lastName) {
    $fullName .= $lastName;
} else {
    $fullName .= $defaultNamePattern;
}
$dir = $_SERVER['DOCUMENT_ROOT'].'/data2/mysqldump/';
$directory = new RecursiveDirectoryIterator($dir);
$flattened = new RecursiveIteratorIterator($directory);
$regex = '#^(?:[A-Z]:)?(?:/(?!'.Trash)[^/]+)+/'.$fullName.''.(?:sql)'.(?:bz2)$#i';
$files = new RegexIterator($flattened, $regex);
echo $regex . "'n";
foreach($files as $file) {
    echo $file . PHP_EOL;
}

目录结构:

数据2/└──mysqldump├──050516│├──phpdev11_test1.sql.bz2│├──phpdev12_test1.sql.bz2│├──phpdev12_test2.sql.bz2│└──test.txt├──050517│├──phpdev11_test1.sql.bz2│└──phpdev12_test1.sql.bz2└── .废物└──phpdev11_test1.sql.bz2

输出:

#^(?:[A-Z]:)?(?:/(?!''.Trash)[^/]+)+/phpdev11_test1''.(?:sql)''.(?:bz2)$#i/var/www/apps/misc/phptut/trash/php/data2/mysqldump/05517/phpdev11_test1.sql.bz2/var/www/apps/misc/phptut/trash/php/data2/mysqldump/05516/phpdev11_test1.sql.bz2