Bug #67481 [Com]: Opcache uses wrong file from cache

From: 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

« previous php.bugs (#187042) next »