2020年4月22日水曜日

php windowsの共有ファイルをrenameできない

意味不明の動作に悩んでいます。

まず、ファイルは、windowsの共有フォルダの中にあるファイルです。

このファイルにアクセスするのは、ubuntuのphpで書かれたスクリプトです。

phpで、rename関数を使って、ファイル名を変更しようとしてもできません。
代わりに、passthru関数を使い、mvコマンドを使って、ファイル名を変更しました。

1回目は問題なくできました。
しかし、windowsの方で、ファイル名を元の戻し、再び、実行すると、エラーが発生します。
エラーの内容は、

mv 元のファイル名 are 新しいファイル名 the same file

/etc/fstabに、cache=none を追記して、マウントしても、変わりません。


ファイル名の変更が、1回目はできるのに、元に戻して、2回目は失敗することに、悩んでいます。

Windows内で、別のファイルを作成し、それを、rename前のファイル名に変更するなら、問題は起きません。
単に、ファイル名を元に戻したり、あるいは、元に戻した後、ファイルの内容を編集すると、2回目のファイル名の変更に失敗します。

<追記>
結局、このようにしました。

@unlink($fileFullName2);
rename($fileFullName, $fileFullName2);

unlinkでは、リネーム後のファイルがないため、エラーが発生します。
本来なら、不要な処理です。
しかし、これを行うことで、renameが期待通りに動きました。

renameだけでも、1回目は成功しますから、見つけにくい不具合でした。
PHPでは、1回目にリネームしたファイルがあると認識されるような挙動です。



0 件のコメント:

コメントを投稿