PHP重命名()从/ tmp中抛出的警告,但实际上是从/tmp
dir的作用
问题描述:
移动文件,我得到一个警告:PHP重命名()从/ tmp中抛出的警告,但实际上是从<code>/tmp</code> dir的作用
重命名(/ tmp目录/ [somefile],[目标]):操作在不允许[...]
有三个与它奇怪的事情:
- 两个文件中
/tmp
和[destination]
目录属于(代表执行操作的)进程,并获得所有者的书面许可。 - 文件实际上最终被移动!
- 移动文件跨其他目录,以相同的方式执行,工作正常。
换句话说,它实际上工作,但会抛出警告,就像它没有。对我来说很奇怪。
这种行为可能是什么原因?
答
重命名应该是一个原子操作;也就是说,从来没有过新旧文件名存在或者不存在的时间。/tmp通常是Linux服务器上的独立文件系统。我的猜测是你得到了一个警告,因为移动不是原子的(因为它在两个不同的文件系统之间),即使它起作用。所以这可能更接近于复制,然后是删除而不是在一个文件系统上移动。类似的问题的
+0
看起来像这样,尽管在文档中没有一个关于它的单词。 你的链接很有帮助,谢谢。我考虑使用copy + unlink来代替,并解决了这个问题。 – 1234ru
可同权限的问题,你检查他们呢? – Jer
@Jer,是的,请仔细阅读:“/ tmp和[目标]目录中的文件都属于www进程(代表执行操作)并且拥有所有者的书面许可。” – 1234ru