When does php apc refresh cache data?

I did this experiment with php apc:

In php.ini I set include_path = /first/include/path:/second/include/path, but do not put a file in /first/include/path or /second/include/path, create test.php as simple as this

<?php
require 'tobeincluded.php';

It will run into a fatal error. This error is obvious.

Then I create the file tobeincluded.php in /second/include/path, test.php now runs all right.

Then I create another file with same file name as tobeincluded.php but different content and put it in /first/include/path, test.php keeps running as if /first/include/path/tobeincluded.php does not exist. This is because php apc has cached /second/include/path/tobeincluded.php and ignored /first/include/path/tobeincluded.php. Apc will refresh its cache when it is restarted or original cached file is updated in the file system. I assume apc is checking file timestamp.

Then I copy test.php to test2.php and put test2.php in the same folder as test.php, run test2.php. It renders the same result as test.php – include /second/include/path/tobeincluded.php but ignore the existence of /first/include/path/tobeincluded.php.

Then I copy test.php to test3.php and put test3.php in a different folder (no matter parent folder or child folder or irrelevant folder), run test3.php. Now it is aware of the existence of /first/include/path/tobeincluded.php so /first/include/path/tobeincluded.php is included in test3.php.

Even I trigger to run test2.php in a different virtual host (but same document root), it still renders the same result. I assume php file on the file system is identical to apc. In other words, apc loads cache data by realpath regardless virtual host.

Leave a comment

Your email address will not be published. Required fields are marked *