rename()を実行すると『Operation not permitted』とエラーが表示される

ファイルを移動する関数rename()を実行すると、次のようなWARNINGエラーが発生することがあります。

Operation not permitted

これはrename関数で、ファイルを別のディスクボリューム(パーティション)に移動しているためで、 WARNINGエラーが出てもファイルの移動はされます。

PHP公式のバグレポートでも記載されています。
#50676 rename across Volumes throws warning "Operation not permitted"

エラーが出ないようにするには

@rename(【移動元パス】,【移動先パス】)

のように『 @ 』を付けることでエラーはでなくなりますが、 このようにすると移動元のファイルが存在しなかった場合のエラーや移動先に書き込み権限がなかった場合のエラーなども 表示されなくなります。

このためファイルをコピーして、元のファイルを消すという処理を行うとファイル移動とほぼ同じ動作になります。

if(copy(【移動元パス】,【移動先パス】)){
  unlink(【移動元パス】);
}

renameと違いcopyを使用するとタイムスタンプは保持されません。

関連記事

スポンサーリンク

SQL Buddy ブラウザベースのMySQL管理ツール

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る