IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Archiver une image


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 2
    Points : 5
    Points
    5
    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 : 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
      $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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $zip->addfile($maPhotoDansLeDossier, $photo[$i]) ;
    L'archive n'ajoute pas les images…

    En espérant trouver une solution , je vous salue !

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    pour parcourir un array c'est pas while mais foreach

  3. #3
    Membre éclairé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 411
    Points : 735
    Points
    735
    Par défaut
    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 : 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
    $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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

Discussions similaires

  1. Resize d'une image
    Par Anonymous dans le forum C
    Réponses: 6
    Dernier message: 13/07/2008, 22h23
  2. [JAR] inserer une image dans une archive
    Par mawashee dans le forum Général Java
    Réponses: 2
    Dernier message: 21/04/2005, 23h35
  3. Réponses: 3
    Dernier message: 12/06/2002, 19h03
  4. lire une image au format RAW
    Par Anonymous dans le forum OpenGL
    Réponses: 5
    Dernier message: 20/05/2002, 00h11
  5. faire un selection dans une image aves les APIs
    Par merahyazid dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/04/2002, 10h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo