Bug #70656 [Opn]: require() statement broken after opcache_reset() or a few hours of use
| From: | p at wspnr dot com | Date: | Sun, 25 Oct 2015 15:55:11 +0000 |
| Subject: | Bug #70656 [Opn]: require() statement broken after opcache_reset() or a few hours of use | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-196797@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=70656&edit=1
ID: 70656
User updated by: p at wspnr dot com
Reported by: p at wspnr dot com
-Summary: opcache_reset() breaks "require"
+Summary: require() statement broken after opcache_reset() or
a few hours of use
Status: Open
Type: Bug
Package: opcache
Operating System: Debian (x86_64 and i686)
PHP Version: 7.0Git-2015-10-07 (Git)
Block user comment: N
Private report: N
New Comment:
Updated bug summary
Previous Comments:
------------------------------------------------------------------------
[2015-10-24 17:35:05] p at wspnr dot com
Can confirm: while this happens reliably with \opcache_reset(), we end up running into this issue
after a couple of hours of regular use as well.
------------------------------------------------------------------------
[2015-10-23 06:20:50] ealexs at gmail dot com
This bug is important, it breaks opcache until php-fpm gets a restart !!!
It looks like a very simple fix !!! Probably a bad memcopy there, it does not copy the ending \0
Thanks
------------------------------------------------------------------------
[2015-10-22 11:45:54] ealexs at gmail dot com
Just using PHP7, I don't call opcache_reset()
after a while I get something like:
<b>Fatal error</b>: require_once(): Failed opening required
'/var/www/~users/alex/php7/omi-frame-2/src/controller/App.phpb_my'
(include_path='.:/opt/php-7.0.0/lib/php') in
<b>/var/www/~users/alex/php7/omi-frame-2/src/init.php</b> on line
<b>5</b><br />
It looks like the ending string mark is not copied
I need to restart PHP-FPM 2 or 3 times per day
Thanks,
Alex
------------------------------------------------------------------------
[2015-10-07 04:40:29] p at wspnr dot com
Description:
------------
Calling \opcache_reset() breaks the "require" statement on future page loads. The only
thing that seems to fix it is restarting PHP-FPM.
The require fails, stating that it can't find the file path. The file path listed begins with
the correct path, but is then followed by junk data. The 'junk' data seems to be other
strings from the file(s).
Tested and reproduced on both 64-bit and 32-bit builds.
Test script:
---------------
This is split into three files, running with opcache enabled:
-- file1.php --
<?php
namespace my\nsname;
require 'file3.php';
class MyClass implements MyInterface {}
new MyClass();
echo 'I am file 1';
-- file2.php --
<?php
namespace my\nsname;
\opcache_reset();
echo 'I am file 2';
-- file3.php --
<?php
namespace my\nsname;
interface MyInterface {}
echo 'I am file 3';
-- TEST --
Load, in sequence:
file1.php
file2.php
file3.php
file1.php
Expected result:
----------------
I am file 3
I am file 1
I am file 2
I am file 3
I am file 3
I am file 1
Actual result:
--------------
I am file 3
I am file 1
I am file 2
I am file 3
Fatal error: require(): Failed opening required 'file3.php\myinte'
(include_path='.:') in /.../file1.php on line 5
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=70656&edit=1