Magento2: Comment gérer les fichiers zip

8

J'ai besoin de pouvoir traiter les fichiers zip par programmation.

Dans magento 1.9, je faisais:

$zip = new ZipArchive();

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

Comment puis-je faire de même dans magento 2?

Alexglvr
la source

Réponses:

6

Vous pouvez le faire de la même manière

$zip = new \ZipArchive();

if ($zip->open($Zippath) === TRUE) {
    $zip->addFile($Filepath, $Filename);
    $zip->addFile($Filepath, "toto.txt");
    $zip->close();
    return TRUE; 
}
Priyank
la source
Je viens de tester et j'obtiens une erreur sur $ zip-> close (); : Avertissement: ZipArchive :: close (): Erreur de lecture: est un répertoire. Pour $ FilePath, j'ai / foo / bar et $ FileName toto.txt
Alexglvr
Désolé, était dû à une erreur de frappe ... fonctionnait bien. réponse apporved
Alexglvr
8

Alternativement, vous pouvez utiliser la classe de framework Magento de M2 ​​appeléeMagento\Framework\Archive\Zip et appeler la pack()méthode.

Par exemple, si vous avez injecté la classe et que vous l'avez affectée à la $zipArchivevariable, vous pouvez faire:

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

C'est fondamentalement un php class. Cela n'a rien à voir avec Magento. Cependant, vous pouvez vérifier que la mise en œuvre est toujours la même.

Voici la classe http://php.net/manual/en/class.ziparchive.php

Et voici l'implémentation dans Magento2.

Si vous ouvrez

lib \ internal \ Magento \ Framework \ Archive \ Zip.php vous le trouverez

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