Почему встроенная версия не создает исключение?

Я использую компонент symfony2/finder для доступа к корзине Amazon S3 через потоковую оболочку aws/aws-sdk-php, Я обновлял компонент поиска с 2.7.4 до последней версии 2.7.25 (2.7.25) через:

composer require symfony/finder:2.7.25

В процессе я обнаружил, что когда каталог имеет косую черту в пути, файлы не обнаруживаются.

    $directory = "s3://{$bucket}/{$taskHandle}/transmissions-{$thread}/"; // valid for finder 2.7.4, yet not >=2.7.5 due to traling slash at the end

Я был особенно смущен тем, почему не было исключений или ошибок. Тем не менее, при отладке я обнаружил это странное поведение:

Это будет выполняться очень хорошо, но при этом будет выдан пустой вывод (ложно-положительное выполнение):

    $files = (new Finder())
        ->name('*')
        ->in($directory)
        ->filter(
            function (SplFileInfo $file) use ($lastRuntime) {
                return $file->isFile() && ($file->getMTime() < $lastRuntime);
            }
        )
        ->files();

Тем не менее, когда я удаляю встроенный обратный вызов и делаю это вместо этого:

        ...
        ->filter(
            function (SplFileInfo $file) use ($lastRuntime) {
                $isFile = $file->isFile(); // will now trigger a fatal error
                $modifiedAt = $file->getMTime();

                return $isFile && ($modifiedAt < $lastRuntime);
            }
        )

Тогда я вижу фатальную ошибку:

Fatal error: Uncaught RuntimeException: File or directory not found: s3://somebucket/somekey/foo/bar.csv in vendor/aws/aws-sdk-php/src/S3/StreamWrapper.php:738 Stack trace: #0 vendor/aws/aws-sdk-php/src/S3/StreamWrapper.php(738): trigger_error('File or directo...', 512) #1 vendor/aws/aws-sdk-php/src/S3/StreamWrapper.php(912): Aws\S3\StreamWrapper->triggerError('File or directo...', 0) #2 vendor/aws/aws-sdk-php/src/S3/StreamWrapper.php(301): Aws\S3\StreamWrapper->boolCall(Object(Closure), 0) #3 vendor/aws/aws-sdk-php/src/S3/StreamWrapper.php(246): Aws\S3\StreamWrapper->createStat('s3://...', 0) #4 [internal function]: Aws\S3\StreamWrapper->url_stat('s3://...', 0) #5 
... SplFileInfo->getMTime() #6 [internal function]: UserInterface\Con in vendor/aws/aws-sdk-php/src/S3/StreamWrapper.php on line 738

Это не имеет смысла для меня. Оттуда, где я стою, код должен быть эквивалентным. Что я не получаю?

0 ответов

Другие вопросы по тегам