Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/03/2011, 20h22   #1
Invité de passage
 
Homme Alexandre
Étudiant
Inscription : mars 2011
Messages : 2
Détails du profil
Informations personnelles :
Nom : Homme Alexandre
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mars 2011
Messages : 2
Points : 4
Points : 4
Par défaut Archiver une image

Bonjour à tous,

Suite à de nombreuses recherches, je rencontre toujours un souci pour archiver correctement des images.

Je m'explique. Pour mon stage, je dois développer une interface de saisie de programme.

Les informations entrées sont stockées dans une BDD et des images peuvent être uploadées.

Les informations sont introduites dans un fichier .csv qui se retrouvera, avec les images, dans un dossier spécifique au programme.
Je dois archiver l'ensemble des fichiers et des images pour l'envoyer par la suite sur un serveur FTP.

Avec le code ci-dessous, les images ont l'air d'être compressées avec les autres fichiers (au vue de la taille de l'archive) mais dès que je décompresse mon archive, j'ai le droit à la belle "Erreur : 1 Opération non permise".

J'utilise la librairie zip lib, et j'ai déjà testé la méthode "ZipArchive" en suivant les instructions de http://php.net/manual/fr/book.zip.php qui ne m'a même pas créé d'archive.

Je vous joins mon code :

Code php :
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
  $zip = new zipfile() ; 
 
        // liste des fichiers à compresser
        $files = array ( $file1 , $file2 , $file2 ) ;
        $i = 0 ;
        while ( count( $files ) > $i )   {
 
            $fo = fopen($files[$i],'r') ; //on ouvre le fichier
            $contenu = fread($fo, filesize($files[$i])) ; //on enregistre le contenu
            fclose($fo) ; //on ferme fichier
 
 
            //Commandes qui permet d'ajouter les fichiers 1 à 1 sans sous-dossiers (conformément à Poliris)
            if ($i==0){
                $zip->addfile($contenu, "monFichier1.csv") ; //on ajoute le fichier
            }
            if ($i==1){
                $zip->addfile($contenu, "monFichier2.txt") ; //on ajoute le fichier
            }
            if ($i==2){
                $zip->addfile($contenu, "monFichier3.cfg") ; //on ajoute le fichier
            }
            $i++; 
        }
 
        //Boucle qui permet d'ajouter toutes les images
        for($i=0;$i<21;$i++){
 
            $fo = fopen($dossier."/".$photo[$i],'r') ; //on ouvre le fichier
            $contenu = fread($fo, filesize($dossier."/".$photo[$i])) ; //on enregistre le contenu
            fclose($fo) ; //on ferme fichier
 
           	$zip->addFile($contenu, $photo[$i]);
        }
 
        $archive = $zip->file() ; // on associe l'archive
 
        $nomArchive = $dossier."/monArchive.zip";
 
        // on enregistre l'archive dans un fichier
        $open = fopen( $nomArchive , "wb");
        fwrite($open, $archive);
        fclose($open);

D'après mes recherches, la fonction d'archivage apprécie moyennement le fait que je "lise le contenu" d'un fichier image. J'ai bien conscience que je transforme le contenu de mon image en chaîne de caractère, mais si je fais un simple :
Code php :
1
2
 
$zip->addfile($maPhotoDansLeDossier, $photo[$i]) ;
L'archive n'ajoute pas les images…

En espérant trouver une solution , je vous salue !
Centh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 20h29   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
pour parcourir un array c'est pas while mais foreach
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 10h57   #3
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
En considérant que $file1, $file2, $file3 soient :"monFichier1.csv", "monFichier2.txt" et "monFichier3.cfg", que les images soient dans le même dossier aussi, que les fichiers existent et qu'ils soient dans le même dossier que ton script :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$zip = new zipfile() ; 
$nomArchive = "monArchive.zip";
// liste des fichiers à compresser
$files = array ( $file1 , $file2 , $file2 ) ;
if($zip->open($nomArchive,ZIPARCHIVE::CREATE) !== true) {
     die('erreur lors de la création de l\'archive de base';
}
// ajout des 3 fichiers
foreach($files as $file) {
  $zip->addFile($file,$file); // tout simple.
}
//La boucle pour les images... pourraient être mieux mais sans connaitre ta conf...
for($i=0;$i<21;$i++){
    if(file_exists($photo[$i])) 
          $zip->addFile($photo[$i],$photo[$i]);
}
 
$zip->close(); // hop c'est finit.
ou même mieux si les images et tout sont dans le même dossier :

Code :
1
2
3
4
5
6
7
8
9
10
11
$zip = new zipfile() ; 
$nomArchive = "monArchive.zip";
// liste des fichiers à compresser
$files = array ( $file1 , $file2 , $file2 );
$filesToAdd = array_merge($files, $photo); // on groupe les images et les autres fichiers
if($zip->open($nomArchive,ZIPARCHIVE::CREATE) !== true)
     die('erreur lors de la création de l\'archive de base';
foreach($filesToAdd as $file) {
  $zip->addFile($file,$file); // tout simple.
} 
$zip->close(); // hop c'est finit.
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h04.


 
 
 
 
Partenaires

Hébergement Web