Closed
Description
Symfony version(s) affected: 4.4, 5.1, 5.2
Description
During running command about
in production envinroment, I get an exception:
In AboutCommand.php line 128:
SplFileInfo::getSize(): stat failed for /var/www/intranet/var/cache/prod_linux/jms_serializer/annotations/1a/5b4c75
786d65645c496e7472616e65745c44544f5c536572766963655c48545450436c69656e745c4d53506f637a74615c506f637a74615a65776e657
4727a6e61416c6961737953657269616c697a65725d5b315d.doctrinecache.data
because file is not currently readable.
How to reproduce
php bin/console about --env=prod --no-debug
Possible Solution
Implement CallbackFilterIterator
to RecursiveIteratorIterator
and check if file is_readable()
.
From:
$size = 0;
foreach (new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path, \RecursiveDirectoryIterator::SKIP_DOTS | \RecursiveDirectoryIterator::FOLLOW_SYMLINKS)) as $file) {
$size += $file->getSize();
}
to
$size = 0;
$iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path, \RecursiveDirectoryIterator::SKIP_DOTS | \RecursiveDirectoryIterator::FOLLOW_SYMLINKS));
// https://www.php.net/manual/en/class.callbackfilteriterator.php
$iterator = new \CallbackFilterIterator($iterator, function (\SplFileInfo $current): bool {
return is_readable($current->getPathname());
});
foreach ($iterator as $file) {
$size += $file->getSize();
}
Additional context
https://github.com/symfony/symfony/blob/5.x/src/Symfony/Bundle/FrameworkBundle/Command/AboutCommand.php#L117
I'm ready to fix this with my suggestion :)