Road To Nowhere

主にWebまわりのエンジニア的なお仕事に関するようなことのあれこれ。

rename() で Operation not permitted という WARNING が出た

PHP: rename - Manual
こちらファイルの移動(linuxのコマンドで言うところのmvのような操作)を行うためのPHPの関数。
このrename()を使用したところ Operation not permittedというWARNINGが発生したので、調べたことをメモ。


そもそもの話、このwarningが出てもファイルの移動自体は正常に行われていた。
じゃあなんでwarningなんて吐くの?ということでちょっと調べてみた。


ググると次のような英語のページがヒット。

http://bugs.php.net/bug.php?id=50676

rename() can only work "normally" when operating on the same volume. 

同じディスクのボリュームでのみ「正常に」動くよ、ってことらしい。
確認したところ(dfコマンドで!)確かに違うボリュームへの移動しようとしてた。
まぁこれでwarningの理由はわかったんだけど、すごく気持ち悪い。。


さきほどのページでバグレポートを書いた人が

And as I pointed out in the original bug-report, the source-file actually is deleted, so there is no need for the error message.

ちゃんと動いているんだから、エラーメッセージはく必要ないじゃん!!(意訳)
って言っているのに激しく同意。だってうざいんだもん。


ちなみに
[SOLVED] PHP rename() not permitted
ここで言っているようにrename()を以下のような処理に変えておくのがきっとベスト。

if( copy('/home/frontend/uploadclip.xml', '/var/media/45ecfe0fb82968cd0244666d3b92ac4a2658d844') )
{
unlink('/home/frontend/uploadclip.xml');
}
<