PHP常量__FILE__与URL中的不相同


PHP constant __FILE__ not the same as that in the URL

我在Centos 6.4上使用的是PHP 5.4.20版本。

var/www/html/oldDirecory/index.php中,我开始使用syslog(LOG_INFO,__FILE__);

使用PHP,我使用重命名目录

rename(dirname(__FILE__).'/oldDirectory', dirname(__FILE__).'/newDirectory');

然后,我的脚本使用JS使用window.location重定向到新的URL。下次服务器被击中时,syslog(LOG_INFO,__FILE__);仍然显示旧目录!

使用Bash命令行,我看到目录名已经更改。

我使用vi编辑文件,不做任何更改,然后保存它,然后__FILE__显示正确的目录。

我尝试过制作一个简单的脚本(没有JS重定向、几个includes()等),但似乎无法复制这种行为。我不认为这在早期的PHP版本中发生过,但可能是我添加的其他内容。也许与缓存有关?很抱歉缺少信息,但我被难住了!

您是否使用类似APC的操作码缓存?如果是,请在重命名包含目录后touch受影响的文件。它在解析时进行评估,但操作码缓存存储解析的结果。

我成功地用APC复制了您的问题。据推测,在文件名和索引节点编号匹配的情况下,再加上没有修改时间的更改,它就会进入缓存。用触摸改变修改时间就可以了。