PHP常量__FILE__与URL中的不一样

标签 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 版本中不会发生,但这可能是我添加的其他内容。也许与缓存有关?抱歉缺少信息,但我很困惑!

最佳答案

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

我成功地用 APC 复制了你的问题。据推测,文件名和 inode 编号匹配且没有修改时间更改使其命中缓存。使用 touch 更改修改时间应该可以解决问题。

关于PHP常量__FILE__与URL中的不一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20456281/

相关文章:

multithreading - omp 刷新和 cc-NUMA 架构

PHP:更新 PHP 版本后缺少 JSON 支持

linux - 我很难理解 Shellshock 漏洞验证

linux - 如何扩展 UDP 读取吞吐量?

windows - 如何在 Qt 中为堆叠小部件使用动画?

linux - 读取文件,但提示内核不要缓存其内容?

javascript - 使用 javascript/Jquery 进行 Ajax

Php 找不到 PostgreSQL 库,尽管它存在于指定的文件夹中

php - 对多对多关系执行搜索

caching - 基于子域的 AWS CloudFront 缓存