我在删除目录时遇到问题。
我正在创建一个临时目录,在其中解压缩文件,并且我想在完成后将其删除。
我的代码看起来很像这样:
$tempPath = storage_path('temp/'.$filemd5.'/');
Storage::makeDirectory($tempPath);
$success = Storage::deleteDirectory($tempPath);
return $success;
它不会返回任何内容,并且目录不会被删除。
也许您对
storage/app
目录没有足够的权限(我认为这是默认目录)。检查一下,如果这不起作用,您可以随时调用 PHP exec
函数(假设您使用的是 Linux):
exec('rm -r ' . storage_path() . '/' . $tempPath)
更新:问题是
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);
我有类似的问题,但在目录删除过程中抛出以下异常:
RuntimeException(code: 0): SplFileInfo::getType(): Lstat failed for <my file name>
罪魁祸首是 Vite 查看我的
/storage
目录的内容以进行热重载。不知何故,这混淆了删除逻辑,导致同一个文件出现两次删除,但第二次失败。
以防万一其他人也有同样的问题,这是我用来解决它的 vite 配置:
server: {
watch: {
ignored: ['**/storage/**'],
},
},