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

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

modifs de Julien zippant tout d'un coup pour gagner du temps et de l'énergie (sur zip et 7zip)

File size: 2.9 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        $temps_un=explode(" ",microtime());
31        if($cmd=='PclZip'){include_spip('inc/pclzip');}
32        defined('_DIR_SITE') ? sous_repertoire(_DIR_SITE._NOM_TEMPORAIRES_ACCESSIBLES,'cache-zip') : sous_repertoire(_DIR_RACINE._NOM_TEMPORAIRES_ACCESSIBLES,'cache-zip');
33        supprimer_fichier($chemin);
34        $fichiers = 0;
35        if($cmd=='PclZip')
36        {
37                $zip = new PclZip($chemin);
38                $i = 0;
39                foreach ($array as $fichier){
40                       
41                        if (test_espace_prive()){
42                                $array[$i] = '../'.$fichier;
43                        }
44                        $i++;
45                       
46                       
47                       
48                }
49                $erreur = $zip->add($array,PCLZIP_OPT_REMOVE_ALL_PATH);
50                if ($erreur == 0){
51                                spip_log("$chemin".$zip->errorInfo(true),"zippeur_erreur");
52                               
53                        }
54        }elseif($cmd=='7zip')
55        {
56                foreach ($array as $fichier){
57                        if (test_espace_prive()){
58                                $fichier_liste .= ' ../'.$fichier;
59                        }else{
60                                $fichier_liste .= ' '.$fichier;
61                                }
62                                $fichiers++;
63                }
64                        passthru("7za a -tzip ".$chemin." ".$fichier_liste." -mx5 >/dev/null",$result);
65                        if($result!=0)
66                        {
67                                spip_log($fichier_liste." -- code d'erreur 7z: ".$result,"zippeur_erreur");
68                        }
69                        else{
70                                //$fichiers++;
71                        }
72        }elseif($cmd=='zip')
73        {
74                foreach ($array as $fichier){
75                        if (test_espace_prive()){
76                                $fichier_liste .= ' ../'.$fichier;
77                        }else{
78                                $fichier_liste .= ' '.$fichier;
79                                }
80                                $fichiers++;
81                }
82                        passthru("zip -jq9 ".$chemin." ".$fichier_liste." >/dev/null",$result);
83                        if($result!=0)
84                        {
85                                spip_log($fichier_liste." -- code d'erreur zip: ".$result,"zippeur_erreur");
86                        }
87                        else{
88                                //$fichiers++;
89                        }
90        }
91        if ($fichiers !=count($array)){
92                spip_log("$chemin : $fichiers fichiers présents mais ".count($array)." prévus",'zippeur_erreur');
93                return false;           
94        }else{
95                $temps_deux=explode(" ",microtime());
96                spip_log('zipper en '.($temps_deux[1]-$temps_un[1]).'sec avec '.$cmd,'zippeur');
97                return true;
98        }
99}
100
101?>
Note: See TracBrowser for help on using the repository browser.