RegexIterator для сопоставления с пути к файлам - PullRequest
0 голосов
/ 13 марта 2019

Я пишу функцию для рекурсивного обхода каталогов и возврата файлов в них.Каталоги хранят записи вызовов в файловых путях, которые следуют соглашению об именах '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"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...