Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork9.6k
Open
Description
Symfony version(s) affected
5.4.42
Description
on Windows, isDir() always returns false on all files found using symfony/finder v5.4.42
S3 structure:
test-bucket-symfony-finder test_dir/ test_obj.txt test_subdir/ test_obj.txt
How to reproduce
composer.json
{"require": {"aws/aws-sdk-php":"^3.281","symfony/finder":"^5.4.0" }}
finder.php
<?phprequire'vendor/autoload.php';$s3Client =newAws\S3\S3Client(['version' =>'2006-03-01','region' =>'eu-central-1']);$s3Client->registerStreamWrapper();$bucket ="test-bucket-symfony-finder";$root ="s3://$bucket/test_dir";$finder =new \Symfony\Component\Finder\Finder();try {$files =$finder->in($root);foreach ($filesas$file) {echo"Finder File:" .$file->getPath() .'/' .$file->getFilename() ."; isDir:" . ($file->isDir() ?"true" :"false") ."\n"; }foreach ($filesas$file) {$fi =new \SplFileInfo($file->getPath() .'/' .$file->getFilename());echo"Raw File:" .$fi->getPath() .'/' .$fi->getFilename() ."; isDir:" . ($fi->isDir() ?"true" :"false") ."\n"; }}catch (\Exception$e) {returnfalse;}
On Windows,php finder.php
echos:
Finder File: s3://test-bucket-symfony-finder/test_dir/test_object.txt; isDir: falseFinder File: s3://test-bucket-symfony-finder/test_dir/test_subdir; isDir: falseRaw File: s3://test-bucket-symfony-finder/test_dir/test_object.txt; isDir: falseRaw File: s3://test-bucket-symfony-finder/test_dir/test_subdir; isDir: true
whereas on Linux it echos:
Finder File: s3://test-bucket-symfony-finder/test_dir/test_object.txt; isDir: falseFinder File: s3://test-bucket-symfony-finder/test_dir/test_subdir; isDir: trueFinder File: s3://test-bucket-symfony-finder/test_dir/test_subdir/test_object.txt; isDir: falseRaw File: s3://test-bucket-symfony-finder/test_dir/test_object.txt; isDir: falseRaw File: s3://test-bucket-symfony-finder/test_dir/test_subdir; isDir: trueRaw File: s3://test-bucket-symfony-finder/test_dir/test_subdir/test_object.txt; isDir: false
Possible Solution
as you can see, when creating a new\SplFileInfo
from the IteratorFinder()
returns,isDir()
will return the correct result, but on Windows however theFinder()
won't recursively traverse sub directories since it doesn't recognize thattest_subdir/
is a directory. Wrapping everything manually and recursively would be pretty annoying
Additional Context
No response