我在删除目录时遇到问题。
我正在创建一个临时目录,我解压缩一个文件,我想在完成后删除它。
我的代码看起来就像这样:
$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);