2010-11-15 3 views
1

Ceci est mon scénario:Besoin d'aide pour le traitement d'un fichier ZIP

  • je télécharger un fichier zip
  • Vérifiez chaque fichier dans le fichier zip
  • Si le fichier = l'image, puis déplacez le fichier à destination
  • !
  • si le fichier == l'image, l'image et redimensionne déplacer à destination

I googlé autour et vu des solutions différentes, mais aucun où l'on peut traiter des fichiers avant d'enregistrer eux à la destination finale.

C'est la fonction que je suis arrivé à ce jour:

// Extract zip file and return files in an array. 
    private function processZip() { 
    $zip = new ZipArchive;  
    $tmp_dir = FB_PLUGIN_DIR.'tmp/'; 

    // Extract files to tmp dir 
    if ($zip->open($this->file['tmp_name']) === TRUE) { 
     //Check if temp dir exists. If not, create one. 
     if (!is_dir($tmp_dir)) { 
     mkdir($tmp_dir, 0700); 
     } 

     $zip->extractTo($tmp_dir); 
     $zip->close(); 

    /* Process extracted files */ 

    foreach(glob($tmp_dir.'*.*') as $filename) { 

     // Somehow get MIME type here without using 'finfo' and 'mime_content_type' 
     // I haven't installed PEAR and 'mime_content_type' is decapricated. 
    }  

     return '1'; // success 
    } else { 
     return "0"; // fail 
    } 
    } 

Je ne sais pas si je vais dans la bonne direction ici. D'une certaine manière, je pense que je devrais être capable de traiter les fichiers dans la "boucle ZIP".

Est-il possible de lire les fichiers dans le fichier ZIP, de déterminer le type MIME, puis de traiter le fichier? J'ai trouvé cet exemple: http://www.java-samples.com/showtutorial.php?tutorialid=985
Je pense que c'est proche de ce dont j'ai besoin. Mais je ne sais pas quoi modifier.

Répondre

1

Découpez vos processus. Extrayez tout d'abord du fichier ZIP, puis scannez les fichiers à la recherche de fichiers image et traitez-les.

C'est un processus plus simple, et peut être plus facilement décomposé pour traiter des fichiers zip plus volumineux.

+0

C'est exactement ce que je fais maintenant. Mais je suis bloqué sur l'obtention des informations sur le fichier (type MIME). Voir mes commentaires dans le code. – Steven

0

Voilà comment je l'ai traité un fichier zip dans le passé sans en extraire le tout

$zip = new ZipArchive; 
$zip->open($file); 
for ($i = 0; $i < $zip->numFiles; $i++) { 
    $entry = $zip->statIndex($i); 
    if ($entry['size'] > 0) { 
     $data = $zip->getFromIndex($i); 
     // $data is a binary string of file data 
     // which can be used in GD functions for images 
     // and written to a location for regular files 

     if (preg_match('/\.jpe?g$/i', $entry['name'])) { 
      // JPEG file 
     } else { 
      // Not a JPEG file :-) 
     } 
    } 
} 
$zip->close(); 

Malheureusement, je ne pouvais pas trouver un moyen de lire réellement les informations de fichier sans l'extraire, je l'ai donc parti avec la détection d'extension de fichier.

+0

Le seul problème, c'est que le fichier ne pourrait pas moi ce que dit l'extention. C'est pourquoi je veux lire le type MIME. – Steven

+0

Si vous êtes uniquement intéressé par le traitement de fichiers image, vous pouvez simplement essayer d'exécuter les données de chaîne via 'imagecreatefromstring' qui retournera' false' s'il ne s'agit pas d'un fichier image – Phil

+0

ouais, je sais. Mais le ZIP * pourrait * avoir d'autres types de fichiers. – Steven

Questions connexes