Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: upgrade imagine/imagine to prevent fatal error when using PHP 8.1 & opcache #1491

Merged
merged 1 commit into from
Nov 7, 2022

Conversation

LoicBoursin
Copy link
Contributor

Q A
Branch? 2.x
Bug fix? yes
New feature? no
BC breaks? no
Deprecations? no
License MIT

When using PHP 8.1 & OPcache preload, I was getting an error:

preprod-php-1 | <b>Fatal error</b>: During inheritance of ArrayAccess: Uncaught ErrorException: Return type of Imagine\Image\Metadata\MetadataBag::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /srv/app/vendor/imagine/imagine/src/Image/Metadata/MetadataBag.php:70 preprod-php-1 | Stack trace: preprod-php-1 | #0 /srv/app/vendor/imagine/imagine/src/Image/Metadata/MetadataBag.php(17): Symfony\Component\DependencyInjection\Dumper\Preloader::Symfony\Component\DependencyInjection\Dumper\{closure}(8192, 'Return type of ...', '/srv/app/vendor...', 70) preprod-php-1 | #1 /srv/app/vendor/composer/ClassLoader.php(571): include('/srv/app/vendor...') preprod-php-1 | #2 /srv/app/vendor/composer/ClassLoader.php(428): Composer\Autoload\includeFile('/srv/app/vendor...') preprod-php-1 | #3 [internal function]: Composer\Autoload\ClassLoader-&gt;loadClass('Imagine\\Image\\M...') preprod-php-1 | #4 /srv/app/vendor/symfony/dependency-injection/Dumper/Preloader.php(80): class_exists('Imagine\\Image\\M...') preprod-php-1 | #5 /srv/app/vendor/symfony/dependency-injection/Dumper/Preloader.php(127): Symfony\Component\DependencyInjection\Dumper\Preloader::doPreload('Imagine\\Image\\M...', Array) preprod-php-1 | #6 /srv/app/vendor/symfony/dependency-injection/Dumper/Preloader.php(109): Symfony\Component\DependencyInjection\Dumper\Preloader::preloadType(Object(ReflectionNamedType), Array) preprod-php-1 | #7 /srv/app/vendor/symfony/dependency-injection/Dumper/Preloader.php(127): Symfony\Component\DependencyInjection\Dumper\Preloader::doPreload('Imagine\\Factory...', Array) preprod-php-1 | #8 /srv/app/vendor/symfony/dependency-injection/Dumper/Preloader.php(109): Symfony\Component\DependencyInjection\Dumper\Preloader::preloadType(Object(ReflectionNamedType), Array) preprod-php-1 | #9 /srv/app/vendor/symfony/dependency-injection/Dumper/Preloader.php(127): Symfony\Component\DependencyInjection\Dumper\Preloader::doPreload('Imagine\\Image\\I...', Array) preprod-php-1 | #10 /srv/app/vendor/symfony/dependency-injection/Dumper/Preloader.php(109): Symfony\Component\DependencyInjection\Dumper\Preloader::preloadType(Object(ReflectionNamedType), Array) preprod-php-1 | #11 /srv/app/vendor/symfony/dependency-injection/Dumper/Preloader.php(127): Symfony\Component\DependencyInjection\Dumper\Preloader::doPreload('Liip\\ImagineBun...', Array) preprod-php-1 | #12 /srv/app/vendor/symfony/dependency-injection/Dumper/Preloader.php(109): Symfony\Component\DependencyInjection\Dumper\Preloader::preloadType(Object(ReflectionNamedType), Array) preprod-php-1 | #13 /srv/app/vendor/symfony/dependency-injection/Dumper/Preloader.php(127): Symfony\Component\DependencyInjection\Dumper\Preloader::doPreload('Liip\\ImagineBun...', Array) preprod-php-1 | #14 /srv/app/vendor/symfony/dependency-injection/Dumper/Preloader.php(109): Symfony\Component\DependencyInjection\Dumper\Preloader::preloadType(Object(ReflectionNamedType), Array) preprod-php-1 | #15 /srv/app/vendor/symfony/dependency-injection/Dumper/Preloader.php(59): Symfony\Component\DependencyInjection\Dumper\Preloader::doPreload('Liip\\ImagineBun...', Array) preprod-php-1 | #16 /srv/app/var/cache/prod/App_KernelProdContainer.preload.php(1418): Symfony\Component\DependencyInjection\Dumper\Preloader::preload(Array) preprod-php-1 | #17 /srv/app/config/preload.php(4): require('/srv/app/var/ca...') preprod-php-1 | #18 {main} in <b>/srv/app/vendor/imagine/imagine/src/Image/Metadata/MetadataBag.php</b> on line <b>17</b><br />

LiipImagine is the only library I use which requires imagine/imagine dependency. v1.3.0 fixes this issue.

Copy link
Member

@dbu dbu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the main problem is that we and even more so the imagine package claim to be compatible with php versions that have not even been released. this is always prone to errors.

this change should not be necessary - when switching to a new PHP version, one should always run composer update to update all dependencies to avoid issues like this one.

then again, i see no harm in raising the requirement as imagine still supports PHP 5 which neither the imagine bundle nor symfony itself does.

@coveralls
Copy link

coveralls commented Nov 7, 2022

Coverage Status

Coverage increased (+0.02%) to 81.538% when pulling 23c13d3 on LoicBoursin:fix-php81-fatal-error into ba164fe on liip:2.x.

@dbu dbu merged commit d865681 into liip:2.x Nov 7, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants