Open joec4i opened 1 month ago
I have put my test setup in https://github.com/joec4i/opcache-compile-tests . Thanks!
Hi @joec4i, thanks for your report, and sorry for the delay. I agree that at least the documentation is misleading.
https://www.php.net/manual/en/function.opcache-compile-file.php
This function compiles a PHP script and adds it to the opcode cache without executing it. This can be used to prime the cache after a Web server restart by pre-caching files that will be included in later requests.
The fix^1 is breaking though, so we may not fix it in any supported versions. It should also be discussed on the mailing list.
I believe the removal of function caching is a bit of an overreaction: it was always known, to those who used it, that preloading will cache functions, and requires an include guard to avoid function redeclaration errors, and in fact it is a very useful feature.
There is nothing wrong with this behaviour, and it does what you expect it to do.
I believe I was slightly confused by a different issue I previously dealt with i.e. https://github.com/amphp/amp/issues/321
Description
The following code:
compile-test.php
releases/v1/functions.php
releases/v2/functions.php
Resulted in this output:
But I expected this output instead:
Additional Context: The issue happens on both cli and php-fpm. It seems to be similar to https://bugs.php.net/bug.php?id=66066 . While the use case in bug 66066 might be less common in the real world and probably should be avoided, it's a perfectly valid use case to run multiple releases with similar files under the same php-fpm instance.
Workaround Our current workaround is to compile different releases with different requests, i.e. PHP will happily process the following logics in two different requests.
compile-v1.php
compile-v2.php
opcache_get_status()['scripts']
shows that the two files have been compiled successfully.PHP Version
PHP 8.3.13
Operating System
No response