【Laravel】Storage::deleteDirectory()で削除できないディレクトリがある

実現したいこと

以下のような構成のディレクトリがstorage/app/に保存してある。

parent/child1/file.csv
parent/child2/file.csv
parent/child3/file.csv
・・・

このparentディレクトリを配下のサブディレクトリごと削除したい。

発生している問題・分からないこと

Laravelドキュメント
に倣って記載しましたが、エラーが出ました。
しかし、実行結果を見ると、child1以下のファイルは全て消えており、child1は空ディレクトリとなっています。
(child1ディレクトリ削除で失敗しているため、child2以降は未処理)

エラーメッセージ

error

1rmdir(C:\***\storage\app\parent\child1): Directory not empty

該当のソースコード

PHP

1Storage::deleteDirectory('parent');

試したこと・調べたこと

上記の詳細・結果

ディレクトリ削除の順番が前後してしまっているのでは、と思い、以下のように子ディレクトリから削除するように修正してみました。

php

1foreach($children as $child) {2 Storage::deleteDirectory($child);3}

rmdir(C:***\storage\app\parent\child3): Directory not empty

エラー内容は同じなのですが、今度はchild1と2は正常に削除できて、child3が削除できない状態になりました。
削除できないディレクトリは一番最後のディレクトリだけで、child5まであるなら1~4は削除できて5だけできない、という感じです。

じゃあもういっそファイルから削除すればよいのでは?と以下のように書いてみましたが、

php

1Storage::delete($child. '/file.csv');2Storage::deleteDirectory($child);

Unreadable file encountered:

別のエラーが出て、結果は変わらず最後の子ディレクトリ(中身は空)で止まっています。

他にも、明示的にStorage::disk('local')を書いてみたり、sleep()で待機してみたりしましたが変わりません。

なぜ最後のディレクトリだけが削除できないのかが本当にわからずお手上げ状態です。

補足

Laravel6.18.18
PHP7.3.33

コメントを投稿

0 コメント