2012-08-22 38 views
3

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

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

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

任何可能出错的想法?看起来不知何故,PHP“知道”文件来自哪里,并且正在获取该信息而不是它当前所在的位置。重新保存文件会使PHP(或者文件系统)醒来。

+2

这将有助于了解问题所在的文件系统和操作系统。 –

+1

另外如果你发布了你的代码 –

+0

对不起,操作系统是linux ubuntu,文件系统是ext3。唯一相关的代码是对__FILE__的引用,以获取包含在许多其他无用代码中的require语句中的目录路径。我会尝试获得一个较小的测试示例并将其发布到此处。 – juacala

回答

4

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

看起来像一个错误,它会混淆像这样的路径,但修复很容易。如果我在移动文件后重置操作码缓存,它会解决问题。

0

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

我可能是错误的,不明白你的问题非常好,但尝试输出文件的名称和它们的路径,并在‘移动’操作

相关问题