source: spip-zone/_plugins_/zippeur/zippeur_fonctions.php @ 47214

Last change on this file since 47214 was 47214, checked in by maieul@…, 10 years ago

une sacré optimisation : on peut passer un $array à la fonction pclzip plutôt que de lui passer chaque document 1 par 1. Et bien mine de rien cela va plus vite (testé sur 95 mo de document en 180 élèments, je suis passé de 7 minute 30 à moins d'une minute)

File size: 2.5 KB
Line 
1<?php
2
3function zippeur($array,$date,$cmd,$nom=''){
4        $nom == '' ? $nom = md5(serialize($array)) : $nom = $nom;
5        $cmd =='' ? $cmd = lire_config('zippeur/zippeur_cmd'):$cmd=$cmd;
6       
7        defined('_DIR_SITE') ? $chemin = _DIR_SITE._NOM_TEMPORAIRES_ACCESSIBLES.'cache-zip/'.$nom.".zip" : $chemin = _DIR_RACINE._NOM_TEMPORAIRES_ACCESSIBLES.'cache-zip/'.$nom.".zip";
8        include_spip('inc/flock');
9        $enbase = sql_fetsel('id_zip,fichiers,date_modif','spip_zippeur',"`nom`='$nom'");
10        /* On vérifie si le zip existe*/
11        if (count(preg_files($chemin))==0 or!$enbase['id_zip'] or $enbase['date_modif']!=$date or count($array)!=$enbase['fichiers']){
12               
13                if(zippeur_zipper($chemin,$array,$cmd))
14                {
15                        spip_log("Zippage de $nom.zip avec cmd=$cmd","zippeur");
16                        if ($enbase['id_zip']){
17                                sql_updateq("spip_zippeur",array("date_modif"=>$date,'fichiers'=>count($array)),"id_zip=".$enbase['id_zip']);   
18                        }
19                        else{
20                                sql_insertq("spip_zippeur",array("nom"=>$nom,"date_modif"=>$date,'fichiers'=>count($array)));   
21                        }
22                }
23        }
24;
25       
26        return $chemin;
27}
28
29function zippeur_zipper($chemin,$array,$cmd){
30        if($cmd=='PclZip'){include_spip('inc/pclzip');}
31        defined('_DIR_SITE') ? sous_repertoire(_DIR_SITE._NOM_TEMPORAIRES_ACCESSIBLES,'cache-zip') : sous_repertoire(_DIR_RACINE._NOM_TEMPORAIRES_ACCESSIBLES,'cache-zip');
32        supprimer_fichier($chemin);
33        $fichiers = 0;
34        if($cmd=='PclZip')
35        {
36                $zip = new PclZip($chemin);
37                $i = 0;
38                foreach ($array as $fichier){
39                       
40                        if (test_espace_prive()){
41                                $array[$i] = '../'.$fichier;
42                        }
43                        $i++;
44                       
45                       
46                       
47                }
48                $erreur = $zip->add($array,PCLZIP_OPT_REMOVE_ALL_PATH);
49                if ($erreur == 0){
50                                spip_log("$chemin".$zip->errorInfo(true),"zippeur_erreur");
51                               
52                        }
53        }elseif($cmd=='7zip')
54        {
55                foreach ($array as $fichier){
56                        if (test_espace_prive()){
57                                $fichier = '../'.$fichier;
58                        }
59                        passthru("7za a -tzip ".$chemin." ".$fichier." -mx5 >/dev/null",$result);
60                        if($result!=0)
61                        {
62                                spip_log($fichier." -- code d'erreur 7z: ".$result,"zippeur_erreur");
63                        }
64                        else{
65                                $fichiers++;
66                        }
67                }
68        }elseif($cmd=='zip')
69        {
70                foreach ($array as $fichier){
71                        if (test_espace_prive()){
72                                $fichier = '../'.$fichier;
73                        }
74                        passthru("zip -q9 ".$chemin." ".$fichier." >/dev/null",$result);
75                        if($result!=0)
76                        {
77                                spip_log($fichier." -- code d'erreur zip: ".$result,"zippeur_erreur");
78                        }
79                        else{
80                                $fichiers++;
81                        }
82                }
83        }
84        if ($fichiers !=count($array)){
85                spip_log("$chemin : $fichiers fichiers présents mais ".count($array)." prévus",'zippeur_erreur');
86                return false;           
87        }else{
88                return true;
89        }
90}
91
92?>
Note: See TracBrowser for help on using the repository browser.