【问题标题】:PHP constant __FILE__ not the same as that in the URLPHP 常量 __FILE__ 与 URL 中的不一样
【发布时间】:2013-12-25 17:10:41
【问题描述】:

我在 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 版本中不会发生,但它可能是我添加的其他内容。也许与缓存有关?抱歉信息不足,但我很难过!

【问题讨论】:

  • 您可能想阅读this 以了解__FILE__ 的实际工作原理
  • @MarkBaker。谢谢马克。我已经多次阅读该帖子,但仍然感到困惑。好的,FILE 在解析器时被评估。我不知道这如何导致我的问题。请提供任何其他提示或建议。谢谢你

标签: php linux caching rename file-permissions


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2023-04-07
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多