3

我正在使用 PHP 解压缩 PHP 应用程序本身的更新。这是通过从更新服务器获取一个 zip 文件,解压缩它,然后递归地将解压缩的文件移动到应用程序当前存在的文件上来完成的。

问题是我下次使用该应用程序时,__FILE__(在至少一个新文件中)给出了最初解压缩 zip 文件的目录中的位置。由于这不是文件的实际位置,因此在使用 __FILE__ 查找当前目录的后续 require 函数调用中出现错误。

最奇怪的部分:我所要做的就是在编辑器中打开文件并重新保存(例如添加和删除空格),然后 PHP 将正确解析文件路径。

有什么想法可能会出错吗?似乎PHP以某种方式“知道”文件来自哪里并且正在获取该信息而不是它当前所在的位置。重新保存文件会使 PHP(或者可能是文件系统)唤醒。

4

2 回答 2

4

我发现了问题。我应该猜到这是一个缓存问题。问题是服务器正在使用 APC 操作码缓存。我需要此文件位于解压缩文件夹位置中的位置。由于该文件已经存在于 APC 缓存中(具有相同修改日期的完全相同的文件),当它在新位置需要它时,它正在使用 APC 操作码缓存中的缓存文件,包括其旧路径!

似乎是一个错误,它会像那样混淆路径,但修复很容易。如果我在移动文件后重置操作码缓存,它可以解决问题。

于 2012-08-22T01:10:25.307 回答
0

PHP 将文件保存在具有不同名称的临时位置。我的猜测是解压缩过程会在临时目录中创建文件,然后它会移动它们并且找不到文件。

我可能弄错了,不太了解您的问题,但尝试在“移动”操作中输出文件的名称及其路径以及相同的内容

于 2012-08-22T01:05:55.020 回答