PHP常量__FILE__与URL中的不一样

时间:2013-12-08 17:08:48

标签: php linux caching rename file-permissions

我在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版本中,但它可能是我添加的其他东西。也许与缓存有关?抱歉缺乏信息,但我很难过!

1 个答案:

答案 0 :(得分:1)

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

我成功地用APC复制了您的问题。据推测,使用文件名和inode数字匹配以及没有修改时间更改使其达到缓存。使用touch更改修改时间应该可以解决问题。