Bonjour tout le monde.
Je travaille sur un projet en php Symfony, dans un de mes pages, j'ai créé un ajax upload qui charge des fichiers compressés (extension .zip). L'upload fonctionne parfaitement, le fichier zipé se copie dans le répertoire correspondant, et après je dois l'unzipper dans le classe d'actions de php mais il y a toujours un problème = echec de décomprsssion.
Je n'arrive pas à découvrir où exactement ça foire.
Voilà le code de la page où je créé l'upload ajax :
Avec cet upload, il y a un autre formulaire, c'est pas ça le problème du tout.
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120 <script type="text/javascript"> $(document).ready(function() { //fonction de pause pour donner le temps de chargement du zip function pause(millis) { var date = new Date(); var curDate = null; do { curDate = new Date(); } while(curDate-date < millis) } //C le bouton de chargement de l'arborescence new AjaxUpload('#button', { action: '<?php echo url_for('@upload');?>', name: 'userfile', onSubmit : function(file , ext) { if (! (ext && /^(zip)$/i.test(ext))) { // extension is not allowed alert('Error: invalid file extension'); // cancel upload return false; } else { //var adrs = $('#adr').val(); //alert(adrs) //DisplayTr(adrs); $('#filename').val(file); $('#buttonValid').removeAttr('disabled'); pause('500'); $.ajax({ type: "POST", url: '<?php echo url_for('template/viewtmpl'); ?>', data: 'file='+file, success: function(result){ DisplayTr(result); } }); } } }); //le window de montrer l'arborescence messageObj = new DHTML_modalMessage(); // We only create one object of this class messageObj.setShadowOffset(5); // Large shadow function DisplayTr(code) { messageObj.setHtmlContent(code); messageObj.setCssClassMessageBox(false); messageObj.setSize(300,500); messageObj.setShadowDivVisible(true); // Enable shadow for these boxes messageObj.display(); } function closeTr() { messageObj.close(); } }); function changeForm() { $('#tree').hide(); $('#infos').show(); } </script> <div id="cont_frm"> <form action="#" method="post" enctype="multipart/form-data"> <h1>Nouveau Template</h1> <hr /> <div id="tree" style="display:block"> <table align="center" border=0> <tr> <td> <label id="labelfile">Pour pouvoir charger votre arborescence, elle doit etre sous forme d'un fichier zip.<br></label> </td> </tr> <tr> <td> <input id="button" type="button" value="Parcourir..."/> <input id="buttonValid" type="button" value="Valider" onclick="changeForm()" disabled="true" /> </td> </tr> <tr> <td> <input type="hidden" name="filename" id="filename" value="" /> </td> </tr> </table> </div> <div id="infos" style="display:none"> <table align="center" border=0> <tbody> <?php echo $tmpl; ?> </tbody> </table> <hr /> <table align="center" border=0> <tr> <td colspan="4"> <input type="submit" value="Enregistrer" /> <input type="reset" value="Annuler" /> </td> </tr> </table> </div> </form> </div>
Voilà le code de la classe actions.class.php
Si qulequ'un a n'importe quelle idée, qu'il me le propose s'il vous plait, je suis liée par un délai
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 //fonction de l upload du tree zipé dans le répertoire d upload public function executeUpload(sfWebRequest $request) { foreach($_FILES as $fichier) { $this->fileName = $fichier['name']; $this->target = sfConfig::get('sf_upload_dir').'/'.$this->fileName; move_uploaded_file($fichier['tmp_name'], $this->target); exec('chmod 777 '.$this->target); } } //fonction qui affiche le tree de template contenu dans le fichier zipé public function executeViewtmpl(sfWebRequest $request) { if ($this->getRequest()->getMethod() == sfRequest::POST) { $this->file = $request->getParameter('file'); $this->path = sfConfig::get('sf_upload_dir').'/'.$this->file; //vider le contenu du répertoire de décompression IMPORTANT!!! exec('rm -rf '.sfConfig::get('sf_upload_dir').'/template/*'); $this->zip = new ZipArchive(); // On vérifie l'ouverture de l'archive if($this->zip->open($this->path!== TRUE)) { die("Echec lors de l'ouverture de l'archive"); } //extraction $this->zip->extractTo(sfConfig::get('sf_upload_dir').'/template/') or die("Erreur rencontrée lors de l'extraction de l'archive"); //fermeture de l'archive $this->zip->close() or die("Erreur lors de la fermeture de l'archive"); //exec('rm -rf '.$this->path); } }
Merci..
Partager