|
|
|
| 1. Какой функцией извлечь список файлов в архиве без распаковки. То есть открыть для чтения можно? 2. Как создать буфер для временных файлов извлеченных из архива, с их удалением (заменой) при новом цикле (запросе) к скрипту. | |
|
|
|
|
|
|
|
для: Giga
(26.09.2006 в 18:57)
| | 1. Методом listContent().
2. Что вы подразумеваете под буфером для временных файлов? А удалить файл можно функцией unlink().
http://php.russofile.ru/ru/authors/unsort/zip/ | |
|
|
|
|
|
|
|
для: Саня
(26.09.2006 в 22:35)
| | Спасибо, немного разобрался. Похожую проблему как в ссылке хочу решить и я. Там у него индексы для извлечения отдельного файла из архива уже есть в скрипте. Я же эти индексы хочу взять из архива. Более всего на роль индекса подходит имя файла, я его получил без распаковки с помощью listContent(), теперь вот загвоздка как из того цикла выбрать массив с значением $key = 'filename'; и записать в файл, например listfilename.txt, попытка внедрить запись в сам цикл привела только к записи последнего индекса. То есть из списка цикла в 100 файлов архива, в базу listfilename.txt записался только последний $i=100, а не весь массив. Тяжело блин обьяснять, "я не волшебник, только учусь" :) | |
|
|
|
|
|
|
|
для: Giga
(27.09.2006 в 10:24)
| | А насчет временных файлов я сделал через fopen (temporary.file, "w") по идее должно при новом извлечении файла из архива содержимое перезаписать в этот файл. Сильно боюсь я за буфер временных файлов. Если размещу на хостинге, а место у меня весьма скудное, могут забить этот буфер и повиснет мой хостинг. | |
|
|
|
|
|
|
|
для: Giga
(27.09.2006 в 10:24)
| | А каким скрипты вы производите запись в файл? | |
|
|
|
|
|
|
|
для: Giga
(26.09.2006 в 18:57)
| | Как каким? Своим собственным. Сам пишу на основе функций pclzip. Прикинул степень сжатия тестового архива файлов 92 штук миди размером 339 kb, при распаковке выходит 1.85 mb, а места на диске занимает 2.04 mb. Пока добился вывода списка файлов.
include_once('pclzip.php');
$arch = "test.zip";
$zip=new PclZip("$arch");
?echo "$arch<br>";
? if (($list = $zip->listContent()) == 0) {?
die("Error : ".$zip->errorInfo(true));
? } $archsize = filesize($arch); $archsize = round($archsize/1024);
$archcount = count($list); echo "размер ".$archsize." kb<br>всего: ".$archcount."файл(ов)<br>";
for ($i=0; $i<sizeof($list); $i++) {
for(reset($list[$i]);
$key = key($list[$i]);
next($list[$i])) { $listcontent = "[$i]-$key:".$list[$i][$key]."";
$listfile = strst($listcontent,"-filename");
$listfile =ereg_replace("([0-9A-Za-z()_^\.]+#*)","<a href=\"$PHP_SELF?mode=extract&arch=$arch&
file=\\1\">\\1</a><br>",$listfile);
|
| |
|
|
|
|
|
|
|
для: Giga
(26.09.2006 в 18:57)
| | Переменную $arch соответственно можно подставить любую. Полученную переменную $file с именем файла в архиве передаю
$content = $zip->extract(PCLZIP_OPT_BY_NAME, $file, PCLZIP_OPT_EXTRACT_AS_STRING);?//
?$content = $content[0]['content'];?
$base=fopen("temporary.mid","w");?
fputs($base,"$content");?fclose($base);
| ?содержимое файла $file записываю в temporary.mid. При новом запуске сценария и изменения значения $file соответственно перезаписывает temporary.mid.?? | |
|
|
|
|
|
|
|
для: Giga
(26.09.2006 в 18:57)
| | Все готов конечный продукт, если кому интересно http://gwap.net.ru/midi/. Экономия места на хостинге 5-7 кратная!!! | |
|
|
|