php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #74268 Opcache fails to detect directory symlink changes
Submitted: 2017-03-17 21:07 UTC Modified: -
Votes:7
Avg. Score:4.3 ± 0.7
Reproduced:7 of 7 (100.0%)
Same Version:2 (28.6%)
Same OS:3 (42.9%)
From: marshall at ahoy dot com Assigned:
Status: Open Package: opcache
PHP Version: 7.1.3 OS: Linux Ubuntu 16.04.2 LTS
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: marshall at ahoy dot com
New email:
PHP Version: OS:

 

 [2017-03-17 21:07 UTC] marshall at ahoy dot com
Description:
------------
When a directory symlink is changed to a new target directory and the new target contains file names that were also in the old target directory, OPcache sometimes returns the old file instead of the new file.

lrwxrwxrwx 1 root root     2 Mar 17 20:28 v -> v1
-rw-r--r-- 1 root root    60 Mar 17 20:22 test.php
drwxr-xr-x 2 root root  4096 Mar 17 20:22 v2
drwxr-xr-x 2 root root  4096 Mar 17 20:21 v1

Both v1 and v2 contain home.php with different contents

Changing the symlink v from v1 to v2 does not always cause the desired result.  Sometimes OPcache alternates between the two different home.php pages.

Using FPM/FastCGI with PHP Version 7.1.3-2+deb.sury.org~xenial+1
Same problem using PHP Version 7.0.15

Test script:
---------------
test.php:
<?php
echo "This is test.php\n";
include("v/home.php");
?>

v1/home.php:
<?php
echo "This is v1/home.php\n";

v2/home.php:
<?php
echo "This is v2/home.php\n";



Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2022-01-11 23:23 UTC] jake at qzdesign dot co dot uk
`touch`ing or updating the file in either the old or the new symlink does not resolve the issue - it can even be seen that code newly added into the old symlink gets executed.

Adding `opcache_reset()` into the code in the old symlink does however resolve the issue for the next page load - thus showing that the issue is with OPcache.

(PHP 7.3.33 LiteSpeed V7.9 Cloudlinux 1.3)
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Nov 21 17:01:32 2024 UTC