Magento2: Como lidar com arquivos zip

8

Eu preciso ser capaz de tratar arquivos zip programaticamente.

No magento 1.9 eu estava fazendo:

$zip = new ZipArchive();

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

Como posso fazer o mesmo no magento 2?

Alexglvr
fonte

Respostas:

6

Você pode fazer isso da mesma maneira

$zip = new \ZipArchive();

if ($zip->open($Zippath) === TRUE) {
    $zip->addFile($Filepath, $Filename);
    $zip->addFile($Filepath, "toto.txt");
    $zip->close();
    return TRUE; 
}
Priyank
fonte
Acabei de testar e recebo um erro em $ zip-> close (); : Aviso: ZipArchive :: close (): Erro de leitura: é um diretório. Por US $ FilePath eu tenho / foo / bar e US $ FileName toto.txt
Alexglvr
Desculpe, foi devido a um erro de digitação ... funcionando bem. resposta apporved
Alexglvr
8

Como alternativa, você pode usar a classe de framework Magento do M2 chamadaMagento\Framework\Archive\Zip e chamar o pack()método.

Por exemplo, se você injetou a classe e a atribuiu à $zipArchivevariável, você pode:

$this->zipArchive->pack($source, $destination);
Raphael na Digital Pianism
fonte
3

É basicamente um php class. Não tem nada a ver com Magento. No entanto, você pode verificar se a implementação ainda é a mesma.

Aqui está a classe http://php.net/manual/en/class.ziparchive.php

E aqui está a implementação no Magento2.

Se você abrir

lib \ internal \ Magento \ Framework \ Archive \ Zip.php, você encontrará este

public function pack($source, $destination)
    {
        $zip = new \ZipArchive();
        $zip->open($destination, \ZipArchive::CREATE);
        $zip->addFile($source);
        $zip->close();
        return $destination;
    }
Kingshuk Deb
fonte