Архивация на лету на PHP

L
На сайте с 26.02.2008
Offline
25
3383

Собственно суть в том чтобы создавать zip-архив и сразу отдавать его пользователю не сохраняя на диске. Можно ли так сделать??

N
На сайте с 06.05.2007
Offline
419
#1

Возможно все. Как и то, что вас выгонят с хостинга :) если уж вы экономите на файлах, то с процессором там, видимо, еще хуже.

Кнопка вызова админа ()
J
На сайте с 02.02.2009
Offline
53
#2

http://www.phpclasses.org/browse/package/2322.html

или же

http://ru.php.net/manual/en/function.ziparchive-open.php

<?php

$zip = new ZipArchive;
$res = $zip->open('test.zip', ZipArchive::CREATE);
if ($res === TRUE) {
$zip->addFromString('test.txt', 'file content goes here');
$zip->addFile('data.txt', 'entryname.txt');
$zip->close();
echo 'ok';
} else {
echo 'failed';
}
?>

От файла врядли удастся отказаться - если отказываться и считывать напрямую пользователю из памяти - это уже плохо будет серверу)

[Удален]
#3

если вы собираетесь упаковывать один файл, создавайте gzip архив и не парьтесь, winrar его открывает, а во всех никс-подобных системах это вообще "родной формат"


$filename='filename.gz';
header('Content-Disposition: attachment; filename="'.$filename.'"');
header("Content-type: multipart/alternative");

echo gzencode(file_get_contents('somefile'));

ну эт такой, грубый но быстрый способ

A
На сайте с 16.11.2008
Offline
12
#4

Или копать в сторону zlib из phpMyAdmin - самый простой путь. И юзается во многих приложениях...

А еще можно использовать exec (если хостер позволяет ;))

Пишу на похапэ (/ru/forum/342374). Аудит скриптов. За деньги. Качественно.
L
На сайте с 26.02.2008
Offline
25
#5

netwind, с хостинга не выгонят, и винт и проц отличные, а это только временная мера

всем спасибо, решил пока gzip создавать

Mr.Roman
На сайте с 15.09.2008
Offline
68
#6

А задача то какая стоит ? Передавать какие-то файлы с сервера в архивах (интересно что на сервере делают неархивированные файлы) или же немного уменьшить траф ?

Для сокращения трафа есть mod_deflate, который жмет все что угодно (или выборочно, при соответствующей настройке) в gzip и отдает браузеру, а клиент уже сам это дело распаковывает на лету.

С уважением, к адекватным людям.
L
На сайте с 26.02.2008
Offline
25
#7

Mr.Roman, просто на сервере лежит куча html-ок и они все разбросаны по папкам(категориям) смысл в том чтобы пользователь мог выбрать по категории, дате и еще чему-то, после чего скрипт выбирает нужные файлики -> засовывает в архив -> отдает пользователю

как это сделать без архивации на лету и геммороя я пока не придумал..

K
На сайте с 29.04.2008
Offline
74
#8

Во вложении класс с phpclasses и вот вам пример вызова архивации файла с использованием этого класса:


$test = new zip_file($name);
$test->set_options(array('inmemory' => 1, 'recurse' => 0, 'storepaths' => 0));
$test->add_files($id);
$test->create_archive();
$test->download_file();

где $name - имя временного файла а $id - путь к файлу который архивируем

zip archive.zip
Open Source Danneo CMS (http://nafn.ru)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий