Я пишу функцию для рекурсивного обхода каталогов и возврата файлов в них.Каталоги хранят записи вызовов в файловых путях, которые следуют соглашению об именах 'YY/mm/dd'
.
Пример файлового пути будет выглядеть так: /vhosts/example.org/private/recordings/2018/11/21/user@example.org_XXXXXXXXX
Предполагается, что мой сценарий обходит все возможные пути файла длязаданный период времени, а затем перебрать результаты, отфильтровывая те, которые соответствуют определенному человеку.Так как файлы хранятся таким образом, я не использую filemtime()
, вместо этого я создаю регулярное выражение для сопоставления с путем к файлу записи.
//make the date into a regular expression blocks
//this is only a small abstract of the logic that builds the regular expression
$year = date_format($start_date, 'Y');
$months = '([' . date_format($start_date, 'm') . '-' . date_format($end_date, 'm') . '])';
$days = '([' . date_format($start_date, 'd') . '-' . date_format($end_date, 'd') . '])';
//lets assume this was the regex built by that logic
$regex = preg_quote("2018/11/21");
//traverse and build the iterator
$directory = new RecursiveDirectoryIterator($root_directory);
$results = new RecursiveIteratorIterator($directory);
if($condition){
$results = new RegexIterator($results, "#$regex*#", RecursiveRegexIterator::GET_MATCH);
}
Мой вопрос заключается в том, соответствует ли RegexIteratorпротив имени файла или пути к файлу или обоих? Без ввода оператора if я получаю этот ответ.Когда я вхожу в оператор if, я получаю пустой объект.Я еще не выполнил проверку для конкретного пользователя, сначала я убедился, что могу соответственно сузить период времени.
object(SplFileInfo)#9 (2) {
["pathName":"SplFileInfo":private]=>
string(112) "/vhosts/example.org/private/recordings/2018/11/21/user@example.org_82342342.wav"
["fileName":"SplFileInfo":private]=>
string(61) "user@example.org_82342342.wav"
}