来自/ tmp的PHP rename()会抛出警告,尽管实际上有效

时间:2017-08-15 12:00:36

标签: php rename permission-denied tmp

/tmp dir移动文件,我收到警告:

  

重命名(/ tmp / [somefile],[destination]):[...]中不允许操作

它有三个奇怪的东西:

  1. /tmp[destination]目录中的文件都属于www进程(代表执行操作的进程)并拥有所有者的写入权限。
  2. 文件实际上最终被移动了!
  3. 以相同的方式在其他目录中移动文件,工作正常。
  4. 换句话说,它实际上有效,但会发出警告,就像它没有。对我来说很奇怪。

    这种行为可能是什么原因?

1 个答案:

答案 0 :(得分:2)

重命名应该是原子操作;也就是说,从来没有旧文件名和新文件名都存在或者既不存在也不存在。 / tmp通常是Linux服务器上的单独文件系统。我的猜测是你得到一个警告,因为移动不是原子的(因为它在两个不同的文件系统之间),即使它有效。因此,这可能更接近于复制,然后是删除而不是在一个文件系统上移动。

类似问题的示例:https://ubuntuforums.org/showthread.php?t=1272466