【问题标题】:Laravel doesn't delete directoryLaravel 不删除目录
【发布时间】:2015-09-13 17:06:36
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 这里有一点需要注意。 Storage 外观在 ROOT/storage 目录或您在 config/filesystem.php 文件中设置的任何目录中工作。要删除应用程序“存储”范围之外的文件,您应该改用 File 外观

标签: php laravel laravel-5 laravel-5.1


【解决方案1】:

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

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

编辑:

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

File::makeDirectory($path)

File::deleteDirectory($path)

更多关于creating a directoryDeleting a directory

【讨论】:

    【解决方案2】:

    也许您对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); 
    

    【讨论】:

    • 我现在正在使用exec,但我真的很好奇为什么这不起作用。 Storage::copy 也不起作用,而 PHP 的 copy 函数起作用。
    • 目录内容是否保留?
    • 也许问题在于makeDirectory 函数有第二个参数是int,它拥有创建目录的权限,默认为511,即-r-x--x--x,所以你'不应该删除它。尝试使用711 参数(即-rwx--x--x)运行命令。 Storage::makeDirectory($tempPath, 711);
    • 我建议你传递 true 作为另外两个参数,因为它会递归地应用权限并强制操作,所以Storage::makeDirectory($tempPath, 0711, true, true);makeDirectory implementation
    • 好的,我会更新代码,谢谢澄清!
    【解决方案3】:

    就我而言,使用 laravel 6.*

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

    【讨论】:

      猜你喜欢
      • 2016-04-11
      • 2017-07-04
      • 2016-07-25
      • 2018-11-08
      • 2016-09-30
      • 1970-01-01
      • 2016-08-23
      • 1970-01-01
      • 2023-01-01
      相关资源
      最近更新 更多