Попытка использовать Zip-архив PHP — Extract To, похоже, не работает

#php #zip #extract #ziparchive

#php #zip #извлечь #ziparchive

Вопрос:

Был бы признателен за помощь в этом. Я пытался написать PHP-скрипт, который разархивирует zip-файл, созданный с использованием встроенного расширения Zip-архива PHP.

Процесс архивирования был очень простым, но теперь я пытаюсь разархивировать это в определенную папку, и, похоже, это не работает. Единственное, что он делает, это создает папку, в которую я попросил ее извлечь. В этой папке не отображаются файлы.

У меня не было сообщений об ошибках.

Заранее спасибо. Вот мой код:

 <?php

  $root = str_replace('public_html', '', $_SERVER["DOCUMENT_ROOT"]);
  $path = $root.'scripts.zip';

  $zip = new ZipArchive;
  $zipped = $zip->open($path, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE);
  $folder = $root.'public_html/scripts/';

  if ($zipped) {

    $extract = $zip->extractTo($folder);

    if ($extract){

      echo 'Zip File Extracted';

    }

    $zip->close();  

  }

?>
 

Комментарии:

1. Вы действительно хотите использовать ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE флаги для открытия существующего zip-файла?

2. Привет, Марк, к сожалению, я должен. В противном случае Zip-архив рассматривает файл как недопустимый zip-файл. Исправление для этого находится в комментариях к этой странице — www.php.net/manual/en/ziparchive.open.php

3. Потому что вы в основном указываете методу open взорвать любой файл, который уже существует, и создать новый пустой zip-файл с этим именем … так что, конечно, он делает именно то, что вы ему говорите

4. Итак, реальный вопрос должен заключаться в том, почему исходный файл не открывается корректно, если вы не используете эти флаги: был ли он создан правильно в первую очередь. Какие ошибки это дает? Вы пробовали проверять с помощью кодов ошибок класса ZipArchive?

5. Это означает, что он не распознает ваш файл как zip-файл, предполагая, что ваше первоначальное создание файла не создало действительный файл

Ответ №1:

Я бы изменил ваш код, чтобы он выглядел так, как показано ниже.
То, что вы делали, это создавали новый zip-файл, а не извлекали старый. ZIPARCHIVE::CREATE инструктирует код для создания zip, ZIPARCHIVE::OVERWRITE сообщает ему перезаписать существующие файлы в zip.

Таким образом, вы ничего не извлекаете из zip. Этот приведенный ниже код должен работать

  <?php
    $root = str_replace('public_html', '', $_SERVER["DOCUMENT_ROOT"]);
    $path = $root.'scripts.zip';
    $zip = new ZipArchive;
    $zipped = $zip->open($path); /*I have removed the ::CREATE amp; ::OVERWRITE methods*/
    $folder = $root.'public_html/scripts/';
    if ($zipped) {
       $extract = $zip->extractTo($folder);
       if ($extract){
           echo 'Zip File Extracted';
       }
       $zip->close();
    }
 ?>
 

Надеюсь, это поможет