Я пытаюсь создать три zip-пакета с помощью PHP. Я запускаю функцию, которая копирует каталог и просматривает содержимое, чтобы добавить каждый файл с помощью цикла в zip-архив.
Проблема в том, что ZipArchive, похоже, не закрывает файлы по завершении работы.
В итоге я хочу получить три таких zip-файла:
Package1.zip
Package2.zip
Package3.zip
Вместо этого я получаю что-то вроде этого:
Package1.zip.a012341
Package1.zip.b012342
Package2.zip.a023451
Package2.zip.b023452
Package3.zip.a034561
Package3.zip.b034562
Это похоже на то, что zip-файлы не закрываются и не завершают удаление временного расширения, а пытаются создать еще один файл для каждого файла, но с ними тоже не получается. Я не получаю никаких ошибок, по крайней мере, не то, что я видел.
Я предполагаю, что есть какие-то настройки, которые мне нужно изменить в php.ini или на моем веб-сервере/IIS. Файлы, которые я пытаюсь создать, довольно большие, где-то 450–600 МБ.
Это мое лучшее предположение, поскольку у меня есть две почти идентичные настройки сервера, на которых я пробовал один и тот же код. Он отлично работает на одном из них, но не на другом. Это доказывает, что мой код ZipArchive не может быть здесь проблемой (кстати, я не настраивал серверы, поэтому не знаю, в чем разница).
Я пытался увеличить предел памяти и время выполнения в моем php.ini. Последнее было более ранней проблемой, и я получил сообщение о том, что время ожидания истекло.
Изменить: добавлена функция.
function package_site($filepath, &$context) {
$context['message'] = 'Creating package';
// Mac app
$mac_zipfile = 'public://site_export/mac_package.zip';
copy_directory($mac_zipfile, $filepath . '/mac_package.zip', '/.*/');
$files = file_scan_directory($filepath . '/files', '/.*/');
$mac_zip = new ZipArchive();
if($mac_zip->open(drupal_realpath($filepath . '/mac_package.zip')) === true) {
foreach($files as $key => $value) {
$mac_zip->addFile(drupal_realpath($value->uri), 'mac_package.app/Contents/Resources/' . substr(drupal_realpath($value->uri), strlen(drupal_realpath($filepath . '/files')) + 1));
}
} else {
drupal_set_message("Could NOT open mac_package.zip");
}
$mac_zip->close();
// PC app
drupal_unlink($filepath . '/package.zip');
$start_files_path_pc = 'public://site_export/pc_files';
copy_directory($start_files_path_pc, $filepath . '/files', '/.*/');
$pc_files = file_scan_directory($filepath . '/files', '/.*/');
$zip = new ZipArchive();
$res = $zip->open(drupal_realpath($filepath . '/package.zip'), ZipArchive::CREATE);
if ($res === TRUE) {
foreach ($pc_files as $key => $value) {
$zip->addFile(drupal_realpath($value->uri), substr(drupal_realpath($value->uri), strlen(drupal_realpath($filepath . '/files')) + 1));
}
$zip->close();
}
// Create a html package
create_pure_html_package($filepath);
// HTML package
drupal_unlink($filepath . '/html.zip');
$html_files = file_scan_directory($filepath . '/files/site', '/.*/');
$zip_html = new ZipArchive();
$res = $zip_html->open(drupal_realpath($filepath . '/html.zip'), ZipArchive::CREATE);
if ($res === TRUE) {
foreach ($html_files as $key => $value) {
$zip_html->addFile(drupal_realpath($value->uri), substr(drupal_realpath($value->uri), strlen(drupal_realpath($filepath . '/files')) + 1));
}
$zip_html->addFile(drupal_realpath($filepath . '/start.html'), 'start.html');
$zip_html->close();
}
rrmdir(drupal_realpath($filepath . '/files'));
unlink(drupal_realpath($filepath . '/start.html'));
}
Подробнее здесь: https://stackoverflow.com/questions/241 ... -zip-files
PHP-zipархив оставляет незавершенные zip-файлы ⇐ Php
Кемеровские программисты php общаются здесь
-
Anonymous
1761749003
Anonymous
Я пытаюсь создать три zip-пакета с помощью PHP. Я запускаю функцию, которая копирует каталог и просматривает содержимое, чтобы добавить каждый файл с помощью цикла в zip-архив.
Проблема в том, что ZipArchive, похоже, не закрывает файлы по завершении работы.
В итоге я хочу получить три таких zip-файла:
Package1.zip
Package2.zip
Package3.zip
Вместо этого я получаю что-то вроде этого:
Package1.zip.a012341
Package1.zip.b012342
Package2.zip.a023451
Package2.zip.b023452
Package3.zip.a034561
Package3.zip.b034562
Это похоже на то, что zip-файлы не закрываются и не завершают удаление временного расширения, а пытаются создать еще один файл для каждого файла, но с ними тоже не получается. Я не получаю никаких ошибок, по крайней мере, не то, что я видел.
Я предполагаю, что есть какие-то настройки, которые мне нужно изменить в php.ini или на моем веб-сервере/IIS. Файлы, которые я пытаюсь создать, довольно большие, где-то 450–600 МБ.
Это мое лучшее предположение, поскольку у меня есть две почти идентичные настройки сервера, на которых я пробовал один и тот же код. Он отлично работает на одном из них, но не на другом. Это доказывает, что мой код ZipArchive не может быть здесь проблемой (кстати, я не настраивал серверы, поэтому не знаю, в чем разница).
Я пытался увеличить предел памяти и время выполнения в моем php.ini. Последнее было более ранней проблемой, и я получил сообщение о том, что время ожидания истекло.
Изменить: добавлена функция.
function package_site($filepath, &$context) {
$context['message'] = 'Creating package';
// Mac app
$mac_zipfile = 'public://site_export/mac_package.zip';
copy_directory($mac_zipfile, $filepath . '/mac_package.zip', '/.*/');
$files = file_scan_directory($filepath . '/files', '/.*/');
$mac_zip = new ZipArchive();
if($mac_zip->open(drupal_realpath($filepath . '/mac_package.zip')) === true) {
foreach($files as $key => $value) {
$mac_zip->addFile(drupal_realpath($value->uri), 'mac_package.app/Contents/Resources/' . substr(drupal_realpath($value->uri), strlen(drupal_realpath($filepath . '/files')) + 1));
}
} else {
drupal_set_message("Could NOT open mac_package.zip");
}
$mac_zip->close();
// PC app
drupal_unlink($filepath . '/package.zip');
$start_files_path_pc = 'public://site_export/pc_files';
copy_directory($start_files_path_pc, $filepath . '/files', '/.*/');
$pc_files = file_scan_directory($filepath . '/files', '/.*/');
$zip = new ZipArchive();
$res = $zip->open(drupal_realpath($filepath . '/package.zip'), ZipArchive::CREATE);
if ($res === TRUE) {
foreach ($pc_files as $key => $value) {
$zip->addFile(drupal_realpath($value->uri), substr(drupal_realpath($value->uri), strlen(drupal_realpath($filepath . '/files')) + 1));
}
$zip->close();
}
// Create a html package
create_pure_html_package($filepath);
// HTML package
drupal_unlink($filepath . '/html.zip');
$html_files = file_scan_directory($filepath . '/files/site', '/.*/');
$zip_html = new ZipArchive();
$res = $zip_html->open(drupal_realpath($filepath . '/html.zip'), ZipArchive::CREATE);
if ($res === TRUE) {
foreach ($html_files as $key => $value) {
$zip_html->addFile(drupal_realpath($value->uri), substr(drupal_realpath($value->uri), strlen(drupal_realpath($filepath . '/files')) + 1));
}
$zip_html->addFile(drupal_realpath($filepath . '/start.html'), 'start.html');
$zip_html->close();
}
rrmdir(drupal_realpath($filepath . '/files'));
unlink(drupal_realpath($filepath . '/start.html'));
}
Подробнее здесь: [url]https://stackoverflow.com/questions/24184489/php-ziparchive-leave-unfinished-zip-files[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия