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