Bug #67481 [Com]: Opcache uses wrong file from cache
| From: | wojjie at gmail dot com | Date: | Sat, 09 Aug 2014 03:59:33 +0000 |
| Subject: | Bug #67481 [Com]: Opcache uses wrong file from cache | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-187042@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=67481&edit=1
ID: 67481
Comment by: wojjie at gmail dot com
Reported by: Danack at basereality dot com
Summary: Opcache uses wrong file from cache
Status: Open
Type: Bug
Package: opcache
Operating System: Centos
PHP Version: 5.5.13
Block user comment: N
Private report: N
New Comment:
Same problem exists if you are in a chroot environment. Consider the example provided by the
original author and add chroot to the project directories.
ie:
/home/project1/
/home/project2/
Now each site's index.php is actually:
/web/index.php (project1)
/web/index.php (project2)
Somehow this also causes a collision in the cache and causes PHP to serve the wrong index.php from
cache if you hit project1 first followed by project2 next.
Previous Comments:
------------------------------------------------------------------------
[2014-06-19 17:43:18] Danack at basereality dot com
Made summary not be one word.
------------------------------------------------------------------------
[2014-06-19 16:02:37] Danack at basereality dot com
Description:
------------
When the config 'opcache.validate_timestamps' is set to 0 opcache incorrectly resolves
relative filenames.
If you include a file with
require "../src/bootstrap.php"; from two
completely different directories then OPcache will serve the same file even though
realpath("../src/bootstrap.php"); resolves to completely different
directories.
This does not happen when opcache.validate_timestamps is set to a non-zero value.
It can also be worked around by using require __DIR__ .
'/../src/bootstrap.php';
Test script:
---------------
File /home/project1/web/index.php
=================================
<?php
require "../src/bootstrap.php";
?>
File /home/project2/web/index.php
=================================
<?php
require "../src/bootstrap.php";
?>
File /home/project2/src/bootstrap.php
=====================================
<?php
echo "I am project2's bootstrap file.";
If you go to a webpage served by project1 first, then go to a webpage served by project2, project2
will get be given project1's bootstrap file.
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=67481&edit=1