ZipArchive :: close () не работает на веб-сервере - PullRequest
0 голосов
/ 29 июня 2019

Я создаю папку с файлами в ней.В конце я хочу сжать эту папку.На моей локальной машине, использующей Homestead, все работает правильно.

Однако на моем веб-сервере появляется сообщение об ошибке:

ZipArchive :: close (): Невозможно удалить файл: нет такого файла или каталога

Почему?Папка заполнена всеми файлами ...

Мой код:

$zip_file = storage_path('app\\takeouts\\takeout_' . $this->dataExports->uuid . '.zip');
        $this->zip = new \ZipArchive();
        $this->zip->open($zip_file, \ZipArchive::CREATE | \ZipArchive::OVERWRITE);
        $this->addAllFilesToZipArchive($this->folder_name);
        $this->zip->close();

        Storage::deleteDirectory($this->folder_name);


private function addAllFilesToZipArchive($dir)
    {
        $dirs = Storage::directories($dir);
        $files = Storage::files($dir);
        foreach ($files as $file)
        {
            if(Storage::exists(storage_path("app\\" . $file))) {
                $this->zip->addFile(storage_path("app\\" . $file), str_replace($this->folder_name,"","/" . $file));
            }
        }
        foreach ($dirs as $dir2) {
            $this->addAllFilesToZipArchive($dir2);
        }
    }

1 Ответ

0 голосов
/ 29 июня 2019

Некоторым это может показаться немного очевидным, но это был упущение с моей стороны.

ll функция close().

Если файлы, добавленные к объекту, недоступны во время сохранения, zip-файл не будет создан.

...