Нужна помощь в обработке файла ZIP - PullRequest
1 голос
/ 16 ноября 2010

Это мой сценарий:

  • Я загружаю zip-файл
  • Проверьте каждый файл в zip-файле
  • Если file! = Image, то переместите файл впункт назначения
  • если файл == изображение, измените размер изображения и перейдите к пункту назначения

Я гуглил и видел разные решения, но нигде не удалось обработать файлы перед сохранением их в конечном месте назначения.

Это функция, которую я получил до сих пор:

  // 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
    } 
  } 

Я не уверен, что я иду в правильном направлении.Каким-то образом я думаю, что я должен быть в состоянии обрабатывать файлы, находясь в «цикле ZIP».

Есть ли способ, которым я могу прочитать файлы в ZIP-файле, определить тип MIME и затем обработать файл?

Я нашел этот пример: http://www.java -samples.com/showtutorial.php?tutorialid=985
Я думаю, что это близко к тому, что мне нужно.Но не уверен, что изменить.

Ответы [ 2 ]

1 голос
/ 16 ноября 2010

Отделите ваши процессы.Сначала извлеките все из ZIP-файла, затем отсканируйте файлы на наличие файлов изображений и обработайте их.

Это более простой процесс, и его легче разложить для работы с большими файлами ZIP.

0 голосов
/ 16 ноября 2010

Вот как я обрабатывал zip-файл в прошлом, не извлекая целиком

$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();

К сожалению, я не смог найти способ действительно прочитать информацию о файле, не извлекая его, поэтому я 'ушел с обнаружением расширения файла.

...