Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   php zlib архивировать папку (https://javascript.ru/forum/server/20675-php-zlib-arkhivirovat-papku.html)

devote 13.08.2011 18:02

а можно сразу в архив это все пихать, в место того что я написал внизу кода, сделай так:
<?php
$directory_to_pack = dirname( __FILE__ ).'/!';

$tar = gzopen("mytar.tar.gz", "wb");
$files = getRecursiveDir( $directory_to_pack );
foreach( $files as $record ) {
	TarAddHeader( $tar, $directory_to_pack.'/'.$record, $record );
	TarWriteContents( $tar, $directory_to_pack.'/'.$record );
}
TarAddFooter( $tar );
gzclose( $tar );

?>
И все проблемы, на выходе получишь zlib архив

devote 13.08.2011 18:09

хотя возможно придеться заменить fwrite в функциях:
TarAddHeader
TarWriteContents
TarAddFooter
на gzwrite хотя как не удивительно, даже с обчным работает, ну и метод сжати можешь указать например так:
$tar = gzopen("mytar.tar.gz", "wb9");
где цифра 9 указывает на уровень зжатия

devote 13.08.2011 18:12

Цитата:

Сообщение от ваый
так а почему бы не сделать zip архив в 5 строчек. или обязательно нужен gzip?

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

cuberboy 13.08.2011 18:29

на зип архиве не стал делать потому что ясно как там делать, думал на гз есть что то подобное, вот решил разобраться .... "разобрался", на вскидку ,после пояснений и примеров devote(спасибо),понял что куда и откуда. но что то как то....много кода и муторно, надо капать паки и понимать что за заголовки чего куда откуда, в целом не совсем понимаю чего происходит...то есть саму идею

devote 13.08.2011 18:47

Цитата:

Сообщение от cuberboy
но что то как то....много кода и муторно, надо капать паки и понимать что за заголовки чего куда откуда, в целом не совсем понимаю чего происходит...то есть саму идею

Ну вы народ смешные ппц, все вам подавай готовое и на блюдечке, помню времена когда приходилось писать целые классы ради того что бы упаковать в тот же ZIP архив, а щас вам разрабы столько всего понаделали что все делается одной какой нить функцией, и тем не менее вам этого мало... По мне так наоборот лучше когда я могу сам все контролировать и делать изменения в местах на низком уровне, это дает и опыт и понимание всего алгоритма, что и как работает...

devote 13.08.2011 19:22

поправил свой пример, там в функции TarWriteContents отсутствовало закрытие файла, так же и в getRecursiveDir отсутствовало закрытие директории. Такое бывает когда быстро пишешь, что нить да упустишь. :)

platedz 14.06.2013 18:00

А как ее распаковать?

monolithed 15.06.2013 15:05

Зачем все эти абстракции если можно сделать куда проще:

// Упаковать
exec('tar -zcvf folder.tar.gz folder');

// Распаковать:
exec('tar -zxvf folder.tar.gz');


На всякий:

for i in tar, zip, gunzip, unzip bzip2 bunzip2; \ 
    do \
       man $i; \
    done;

platedz 15.06.2013 15:45

У меня нет доступа к exec на том хостинге, где мне нужно это сделать


Часовой пояс GMT +3, время: 14:32.