Laravel 不会删除目录

问题描述 投票:0回答:4

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

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

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

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

它不会返回任何内容,并且目录不会被删除。

php laravel laravel-5 laravel-5.1
4个回答
8
投票

我认为如果你从

$tempPath
中删除结尾的反斜杠,它可能会起作用。

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

编辑:

好吧,我尝试了不同的方法,看起来

File
类是最简单的。

File::makeDirectory($path)

File::deleteDirectory($path)

有关创建目录删除目录

的更多信息

4
投票

也许您对

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); 

1
投票

就我而言,使用 laravel 6.*

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

0
投票

我有类似的问题,但在目录删除过程中抛出以下异常:

RuntimeException(code: 0): SplFileInfo::getType(): Lstat failed for <my file name>

罪魁祸首是 Vite 查看我的

/storage
目录的内容以进行热重载。不知何故,这混淆了删除逻辑,导致同一个文件出现两次删除,但第二次失败。

以防万一其他人也有同样的问题,这是我用来解决它的 vite 配置:

server: {
    watch: {
        ignored: ['**/storage/**'],
    },
}, 
© www.soinside.com 2019 - 2024. All rights reserved.