2014-11-08 03:00:09 JST
20141107T180009Z
RENAME(2)はマウントポイントを越えて実行できない(ERROR:EXDEV)。アトミックな操作だからあたりまえではある。で、本題はと言うと、 PHPのmove_uploaded_fileは内部でrenameしていて、失敗するとファイルコピーを行うので(コピー終了後に元ファイルは削除)、コピー元とコピー先のファイルが別ファイルシステムに存在すると、アトミックな操作にならないと言うこと。さらに言えば、コピー先のファイルをロックして操作していても、 move_uploaded_fileが非同期でロックを無視してコピーしちゃうと問題になるかも。 (move_uploaded_file in php-5.4.34/ext/standard/basic_functions.c)