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
2. Compression des fichiers avec ZipArchive
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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);
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,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 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
Partager