Какой код в доп действиях сделает при отметке нескольких записей выгрузку всех вложенных к ним в определенное поле файлы в архив для дальнейшего сохранения на локальном диске пользователя?
Доп. действие - выгрузка по отмеченным записям прикрепленных к полю файлов в один архив
Автор Radik, 18 сент. 2013 12:35
Сообщений в теме: 4
#1
Отправлено 18 Сентябрь 2013 - 12:35
#2 Гость_Roman_*
Отправлено 18 Сентябрь 2013 - 14:16
Должно быть примерно так:
$zip = new ZipArchive;
$zip_name = "temp/".microtime(true).".zip";
if ($zip->open($zip_name, ZipArchive::CREATE) !== true) die("Невозможно создать архив!");
foreach ($_POST['sel'] AS $one_line)
{ // Выбираем поле 333 (файл) из таблицы 111
$result = data_select_field(111, "`f333`", "`id`=",$one_line);
if ($row = sql_fetch_assoc($result))
{
$files = explode("\r\n", $row['f333']);
foreach ($files AS $one_file)
$zip->addFile(get_file_path(333, $one_line, $one_file), $one_file);
}
}
$zip->close();
header("Content-Length: ".filesize($zip_name));
header("Content-Disposition: attachment; filename=attach.zip");
header("Content-type: application/zip");
$fd = fopen($zip_name, "r");
while ($str = fgets($fd)) echo $str;
fclose($fd);
unlink($zip_name);
exit;
#3
Отправлено 08 Октябрь 2013 - 16:24
Как я понял, русские названия архивируются не в windows кодировке, названия превращаются в иероглифы, как можно сделать сохранение в windows кодировке?
#4 Гость_Roman_*
Отправлено 08 Октябрь 2013 - 16:30
Можно применить функцию iconv в фрагменте кода
foreach ($files AS $one_file)
$zip->addFile(get_file_path(333, $one_line, $one_file), iconv("utf-8", "cp1251", $one_file));
#5
Отправлено 14 Ноябрь 2013 - 12:26
Спасибо большое, работает!
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных













