我在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版本中,但它可能是我添加的其他东西。也许与缓存有关?抱歉缺乏信息,但我很难过!
答案 0 :(得分:1)
您使用的是像APC一样的操作码缓存吗?如果是,请在重命名包含目录后touch
受影响的文件。它在解析时进行评估,但操作码缓存存储解析的结果。
我成功地用APC复制了您的问题。据推测,使用文件名和inode数字匹配以及没有修改时间更改使其达到缓存。使用touch更改修改时间应该可以解决问题。