Magento2: Cómo lidiar con archivos zip

8

Necesito poder tratar los archivos zip mediante programación.

En magento 1.9 estaba haciendo:

$zip = new ZipArchive();

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

¿Cómo puedo hacer lo mismo en magento 2?

Alexglvr
fuente

Respuestas:

6

Puedes hacer esto de la misma manera

$zip = new \ZipArchive();

if ($zip->open($Zippath) === TRUE) {
    $zip->addFile($Filepath, $Filename);
    $zip->addFile($Filepath, "toto.txt");
    $zip->close();
    return TRUE; 
}
Priyank
fuente
Acabo de probar y aparece un error en $ zip-> close (); : Advertencia: ZipArchive :: close (): Error de lectura: es un directorio. Para $ FilePath tengo / foo / bar y $ FileName toto.txt
Alexglvr
Lo sentimos, se debió a un error tipográfico ... funcionando bien. respuesta solicitada
Alexglvr
8

Alternativamente , puede usar la clase de marco Magento de M2 ​​llamadaMagento\Framework\Archive\Zip y llamar al pack()método.

Por ejemplo, si inyectó la clase y la asignó a la $zipArchivevariable, puede hacer:

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

Es básicamente un php class. No tiene nada que ver con Magento. Sin embargo, puede comprobar que la implementación sigue siendo la misma.

Aquí está la clase http://php.net/manual/en/class.ziparchive.php

Y aquí está la implementación en Magento2.

Si abres

lib \ internal \ Magento \ Framework \ Archive \ Zip.php encontrará esto

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