Compression de fichier avec ZipArchive s'arrête en cours de traitement
Bonjour,
dans un script de dump Mysql, la compression avec ZipArchive s'arrete en cours de traitement.
Le script contient
1. Dump Mysql avec PDO
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
...
$stmt = $pdo->prepare('SELECT * FROM ' . $tablename);
$stmt->execute();
$j = 0;
$line = '';
$buf = '';
$filecount = 2;
while ($row = $stmt->fetch(PDO::FETCH_NUM)) {
$buf = "INSERT INTO " . $tablename . " VALUES (";
$len = count($row);
for ($i = 0; $i < $len; $i++) {
if ($i != ($len - 1)) {
$buf.=$this->setValue($row[$i], $col_mapping[$i]) . ',';
} else {
$buf.=$this->setValue($row[$i], $col_mapping[$i]);
}
}
$buf = $this->removeLineBreak($buf);
$line.=$buf . ");\n";
$buf = '';
$j++;
if ($j >= 5) {
fwrite($fhandle, $line);
if (ftell($fhandle) > (1024 * 1024 * 15)) {//&& 1==2
fclose($fhandle);
$tmpfname = $_SERVER['DOCUMENT_ROOT'] . '/' . $tablename . '_' . $filecount . '.sql';
$sql_files[] = array('file' => $tmpfname, 'name' => $tablename . '_' . $filecount . '.sql');
$filecount++;
$fhandle = fopen($tmpfname, 'w+');
}
$j = 0;
$line = '';
}
}
fclose($fhandle); |
2. Compression des fichiers avec ZipArchive
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
...
foreach ($this->files_dumpsql as $file) {
if ($zip->open($fzip, ZIPARCHIVE::CREATE) === true && file_exists($file['file']) && is_readable($file['file'])) {
if (!$zip->addFile($file['file'], $file['name'])) { //
echo '<br>failed zip ' . $file['name'];
} else {
echo '<br>ok zip ' . $zip->numFiles . ' ' . $zip->status . ' ' . $file['name'];
}
if ($zip->close() == false) {
echo '<br>failed close zip ' . $zip->numFiles . ' ' . $zip->status . ' ' . $file['name'];
}
} else {
echo '<br>failed file ' . $file['name'];
}
}
... |
Lorsque le scripts de dump et de compression sont appelés à la suite, tantot j'ai une erreur 500, tantot la compression s'arrete et reste le fichier temporaire zip,
Lorsque les scripts sont appelés séparément, à savoir un script pour le dump et 1 script pour la compression, ça marche !
Avez-vous une idée de ce qui provoque l'erreur ?
S'agit d'un dépassement de mémoire ? peut-on appeler le garbage collector pour vider la mémoire entre les 2 scripts ?
Bref, merci d'avance pour toute idée