PHP __FILE__为移动的文件提供了错误的位置


PHP __FILE__ gives wrong location for a moved file

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

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

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

有什么可能出错的想法吗?PHP似乎不知何故"知道"了文件的来源,并且正在获取这些信息,而不是它当前的位置。重新保存文件会使PHP(或者文件系统)苏醒过来。

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

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

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

我可能错了,不太理解你的问题,但试着在"移动"操作中输出文件的名称和路径