2 votes

Création d'un fichier zip

J'ai un script pour télécharger un dump de ma base de données, mais le fichier devient gros. J'ai essayé de le compresser avec :

$dump = `mysqldump -u $username -p$password $dbname`;
$fp = fopen('php://temp', 'r+');
stream_filter_append($fp, 'zlib.deflate', STREAM_FILTER_WRITE, array('level' => 9));
fputs($fp, $dump);
rewind($fp);

//Envoi du "fichier"
$this->setLayout(false);
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Description: SQL Dump");  
header('Content-Disposition: attachment; filename="mydump.sql.zip"'); 
$this->fichier = stream_get_contents($fp);

Mais cela crée un fichier zip invalide. Est-ce que quelque chose m'échappe ?

EDITAR

Il doit y avoir un problème dans les en-têtes aussi, Firefox montre le fichier comme "document HTM", et je ne peux pas montrer une taille de fichier.

8voto

Marc B Points 195501

Pourquoi ne pas simplement faire

$dump = `mysqldump ... | gzip -9 > somefile.gz`;

et sauter tout le "do gzip inside php" ?

Vous pourriez même remplacer le passage entier par

passthru('mysqldump ... | gzip -9');

et envoyer la sortie directement au navigateur du client.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X