Magento2: как работать с zip-файлами

8

Мне нужно уметь обрабатывать zip-файлы программно.

В magento 1.9 я делал:

$zip = new ZipArchive();

        if ($zip->open($Zippath) === TRUE) 
        {
            $zip->addFile($Filepath, $Filename);
            $zip->addFile($FilepathL, "toto.txt");
            $zip->close();
            return TRUE;    }

Как я могу сделать то же самое в magento 2?

Alexglvr
источник

Ответы:

6

Вы можете сделать это так же

$zip = new \ZipArchive();

if ($zip->open($Zippath) === TRUE) {
    $zip->addFile($Filepath, $Filename);
    $zip->addFile($Filepath, "toto.txt");
    $zip->close();
    return TRUE; 
}
Priyank
источник
Я только что проверил и получил ошибку на $ zip-> close (); : Предупреждение: ZipArchive :: close (): Ошибка чтения: каталог. Для $ FilePath у меня есть / foo / bar и $ FileName toto.txt
Alexglvr
Извините, из-за ошибки опечатки ... работает хорошо. одобренный ответ
Alexglvr
8

В качестве альтернативы вы можете использовать вызываемый класс M2 фреймворка MagentoMagento\Framework\Archive\Zip и вызывать pack()метод.

Например, если вы внедрили класс и присвоили его $zipArchiveпеременной, вы можете сделать:

$this->zipArchive->pack($source, $destination);
Рафаэль в цифровом пианизме
источник
3

Это в основном php class. Это не имеет ничего общего с Magento. Однако вы можете проверить, что реализация все еще похожа на ту же.

Вот класс http://php.net/manual/en/class.ziparchive.php

А вот и реализация в Magento2.

Если вы откроете

lib \ internal \ Magento \ Framework \ Archive \ Zip.php вы найдете это

public function pack($source, $destination)
    {
        $zip = new \ZipArchive();
        $zip->open($destination, \ZipArchive::CREATE);
        $zip->addFile($source);
        $zip->close();
        return $destination;
    }
Кингшук Деб
источник