Laravel不删除目录


Laravel doesn't delete directory

我在删除目录时遇到问题。

我正在创建一个临时目录,我解压缩一个文件,我想在完成后删除它。

我的代码看起来就像这样:

$tempPath = storage_path('temp/'.$filemd5.'/');
Storage::makeDirectory($tempPath);
$success = Storage::deleteDirectory($tempPath);
return $success;

不返回任何内容,目录也不会被删除

我认为如果你从$tempPath中删除尾部反斜杠,它可能会起作用。

$tempPath = storage_path('temp/'.$filemd5);

编辑:

好的,我尝试了不同的方法,看起来File类是最简单的一个。

File::makeDirectory($path)

File::deleteDirectory($path)

关于创建目录和删除目录的更多信息

也许你没有足够的权限在你的storage/app目录(我认为是默认的)。检查一下,如果这不起作用,您可以调用PHP exec函数(假设您在linux上):

exec('rm -r ' . storage_path() . '/' . $tempPath)

UPDATE:问题是makeDirectory有第二个int参数,默认将权限设置为511,即-r-x--x--x(即读取和执行,但不写)。解决方法是将第二个参数设置为711,即-rwx--x--x,您将能够删除创建的目录。将另外两个参数作为true传递是有用的,因为它将递归地应用权限,并强制操作。

正如Alex所说,你必须使用File而不是Storage。因此,创建目录的最终代码,稍后您将能够删除:

File::makeDirectory($tempPath, 0711, true, true); 

我使用的是laravel 6.*

Storage::disk('directory')->deleteDirectory($pathDirectory);