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 : 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);
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
 
...
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