#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();
}
?>
Надеюсь, это поможет