Errors on 2.2.2
-
2.2.2 results in the following error displaying:
[19-Mar-2024 15:46:12 UTC] PHP Warning: include(/public_html/wp-content/plugins/content-control/vendor/composer/../pimple/pimple/src/Pimple/Container.php): Failed to open stream: No such file or directory in /home2/empowfe0/public_html/wp-content/plugins/wp-simple-firewall/src/lib/vendor/composer/ClassLoader.php on line 576
Rolling back to 2.2.1 removes the issue, but results in this error:
[19-Mar-2024 15:53:03 UTC] PHP Warning: Attempt to read property “term_id” on int in /public_html/wp-content/plugins/content-control/inc/functions/developers.php on line 270
-
Disabling WP Simple Firewall (aka Shield) removes the issue.
Reported on their wall, too. Not sure who’s on point for the fix.
https://ww.wp.xz.cn/support/topic/conflict-with-content-control/#new-topic-0
@bearstar – Ahh, scared me for a minute there that we somehow committed an update without all the build files, but I can see them in SVN just now
I also find it strange 2.2.1 worked, as nothing changed in our vendor classes between those 2 versions.
I wonder if your 2.2.2 zip somehow didn’t fully unzip somehow leaving it partially there, except the error indicates ours loaded, but there was an issue finding files from the other plugin.
Might just be worth reinstalling both from fresh zips to the latest.
Not sure how there could be a namespace issue as the class loaders are usually generated with long strings of random chars in their names too.
Looking at their public code it could simply be that they are using composer without prefixing, resulting in duplicate classes being loaded at points.
Composer is a great tool, but its meant to be used once within a project, not once in each plugin. Because of this we have to prefix every class with a custom namespace so they aren’t all colliding.
I see they have vendor folders but none are prefixed with a custom namespace which is the only way to do it safely in WordPress to prevent collisions.
For example both of our plugins use the composer Pimple container package. But you can see their version is exactly the way it comes from Pimple
27 namespace Pimple; 28 29 use Pimple\Exception\ExpectedInvokableException; 30 use Pimple\Exception\FrozenServiceException; 31 use Pimple\Exception\InvalidServiceIdentifierException; 32 use Pimple\Exception\UnknownIdentifierException; 33 34 /** 35 * Container main class. 36 * 37 * @author Fabien Potencier 38 */ 39 class Container implements \ArrayAccessAnd ours:
29 namespace ContentControl\Vendor\Pimple; 30 31 use ContentControl\Vendor\Pimple\Exception\ExpectedInvokableException; 32 use ContentControl\Vendor\Pimple\Exception\FrozenServiceException; 33 use ContentControl\Vendor\Pimple\Exception\InvalidServiceIdentifierException; 34 use ContentControl\Vendor\Pimple\Exception\UnknownIdentifierException; 35 36 /** 37 * Container main class. 38 * 39 * @author Fabien Potencier 40 */ 41 class Container implements \ArrayAccessIf we didn’t prefix and loaded that file it would immediately throw fatal errors for class already defined.
Luckily because we do prefix, it shouldn’t cause issues, but clearly there is something occurring and this unprefixed setup is likely a factor.
For reference we use this library to auto prefix everything https://github.com/BrianHenryIE/strauss
Hi Daniel, your reference to the namespace issue made me think to look at caching (because I was getting WSOD on my restricted page). I was running WP Super Cache and after getting rid of that plugin, everything seems to function fine again on 2.2.2 with Shield running (however, those errors are still written to the error log). Hopefully the Shield folks see your explanation about prefixing.
Thank you!
Hi all,
We understand the issue of prefixing, but that’s not what exactly is causing the issue here.
Shield uses the Pimple container class, and since it’s not prefixed, it should find it within our vendor folder. But it’s looking into your vendor folder for it (probably happening if your autoloader is installed after ours). Since your
Pimpleclass is prefixed, we wouldn’t expect that to happen as the namespace/class names are different.But it is. So this suggests to me that your autoloader is still referencing the original, unprefixed class, and when the PHP autoloader goes in search for the file, it’s not finding it on disk.
I just looked up your autoloader.php and discovered that it IS in your autoloader:
https://plugins.svn.ww.wp.xz.cn/content-control/trunk/vendor/composer/autoload_classmap.php
Line 210:
'Pimple\\Container' => $vendorDir . '/pimple/pimple/src/Pimple/Container.php',This means your autoloader is invalid… it’s referencing classes that you don’t actually have present on the disk.
I hope that makes sense and you can remove those invalid autoloader references.
Happy to help further if there’s anything else we can do. We will eventually prefix our classes, but in this case, this isn’t what’s going wrong.
Thanks again for your help!
Paul.A number of my clients are starting to report this to us. Is there any chance you could rectify your autoload classmap as soon as you can? This change was introduced with the
2.2.2update:
https://plugins.trac.ww.wp.xz.cn/changeset/3054260/content-control/trunk/vendor/composer/autoload_classmap.phpThe classmap didn’t contain the Pimple class before that change was committed.
@bearstar – Try it now.
Yes, 2.2.4 is no longer producing any errors. Thanks!
Thanks for the confirmation. Please take a moment to rate & review the plugin and or support to spread the word.
The topic ‘Errors on 2.2.2’ is closed to new replies.