Bug #79729 [Asn]: Strings missing last character (Apache + OPcache)
| From: | cmb@php.net | Date: | Tue, 07 Jul 2020 12:56:46 +0000 |
| Subject: | Bug #79729 [Asn]: Strings missing last character (Apache + OPcache) | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-227856@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=79729&edit=1
ID: 79729
Updated by: cmb@php.net
Reported by: ca at lsp dot net
Summary: Strings missing last character (Apache + OPcache)
Status: Assigned
Type: Bug
Package: opcache
Operating System: Windows Server 2016 Standard
PHP Version: 7.3.19
Assigned To: cmb
Block user comment: N
Private report: N
New Comment:
> Other than that, "Opcode handlers are unusable due to ASLR."
> warnings may occur on Windows, so we recommend to never disable
> opcache.file_cache_fallback (which it is in your case); otherwise
> the process exits, which is undesireable.
That's actually nonsense wrt. apache2handler (assuming you're
running a single httpd instance). That error can only occur on
Apache startup, and in that case the base mapping file should be
deleted, and Apache restarted. Or delete the base mapping file
right away before restarting Apache. The base mapping file is in
the temp folder, and its name is
ZendOPcache.MemoryBase@<user>@apache2handler@<md5>
This needs to be documented, and preferably also improved.
Previous Comments:
------------------------------------------------------------------------
[2020-06-25 13:41:49] ca at lsp dot net
Meanwhile, I opened bug 79735 for the "Call to undefined method" error.
After some consideration though, the root cause could be the same. This is the *complete* log entry
for the current issue in the PHP error log:
```
[24-Jun-2020 06:53:14 UTC] PHP Fatal error: Uncaught --> Smarty: Plugin 'cut_hea' not
callable <--
thrown in C:\***\vendor\smarty\smarty\libs\sysplugins\smarty_internal_method_registerplugin.php on
line 50
```
The short stacktrace suggests that this error occurred in an exception_handler or similar, and maybe
OPcache isn't working properly in that context?
------------------------------------------------------------------------
[2020-06-25 10:30:13] ca at lsp dot net
@cmb Thank you for the docs update, I have set those values now.
Today I observed the following (possibly related) exceptions in the same instance, all in the
context of web requests:
```
10:14:02 CEST
Error: Uncaught Error: Call to undefined method ***\MyDB::searchByCol()
10:20:10 CEST
Error: Uncaught Error: Call to undefined method ***\MyDB::searchByCol()
10:23:33 CEST
Error: Uncaught Error: Call to undefined method ***\MyDB::searchByCol()
11:03:03 CEST
Error: Uncaught Error: Call to undefined method ***\MyDB::searchByCol()
```
(Note: The method
MyDB::searchByCol() *does* exist.)
The same issue occurred 3x on June 12, two days after we enabled OPcache (and one day after the
upgrade to 7.3.19).
Unfortunately I had obviously not restarted the Apache server after making the latest config
changes, so the OPcache log verbosity was not sufficient for the web server requests (and possibly
the file_cache value was not yet effective either), so I will have to wait and see if it occurs
again.
One thing I should mention though is that we run multiple branches simultaneously on that test
server:
- C:/app = test app for branch "develop"
- C:/app-review/12345-foo = review app for branch "12345-foo"
So could these issues be related to the fact that there are multiple MyDB.php files? I
wonder if I have to enable opcache.revalidate_path to prevent the wrong file from being
loaded by OPcache?
------------------------------------------------------------------------
[2020-06-24 14:48:37] cmb@php.net
I've just amended the recommended settings section in the docs[1];
will take a while until it is rolled out to the server.
I don't think there is any valuable data you could provide, if the
problem occurs again. Of course, in that case, check the logs,
and maybe it's useful to set opcache.log_verbosity_level to 3 or 4
in advance.
[1] <http://svn.php.net/viewvc?view=revision&revision=350081>
------------------------------------------------------------------------
[2020-06-24 13:14:34] ca at lsp dot net
> To actually enable the file_cache_fallback, you also need to set
opcache.file_cache to an already existing (...) directory.
Thanks for the clarification. I would have expected the "Recommended php.ini settings" [1]
to mention this though. Is it worth creating a separate bug for this documentation improvement?
As regards the truncated strings, is there any valuable data I could collect when the issue appears
again, before trying opcache.optimization_level=0?
[1] https://www.php.net/manual/de/opcache.installation.php#opcache.installation.recommended
------------------------------------------------------------------------
[2020-06-24 12:43:29] cmb@php.net
> opcache.file_cache => no value => no value
To actually enable the file_cache_fallback, you also need to set
opcache.file_cache to an already existing (and writeable, and
preferably empty) directory.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=79729
--
Edit this bug report at https://bugs.php.net/bug.php?id=79729&edit=1