digitorum.ru

Как меня найти

Профиль

icq: 4415944

Как собрать на php tar-архив размером в несколько гигабайт

nix, php

А никак.

Все библиотечки, которые я когда либо видел всасывают в себя весь архив. На не выделенном сервере вам едва ли дадут столько оперативной памяти и позволят php-скрипту ее "взожрать".

Проще всего на php написать script.php, который будет собирать шелл-скрипт вида:

cd ~
mkdir ./maketar 
cd ./maketar 
rm -f ./tarname.tar.gz
cp filename1 newfilename1 && tar -cf ./tarname.tar newfilename1 && rm -f newfilename1
cp filename2 newfilename2 && tar -rf ./tarname.tar newfilename2 && rm -f newfilename2
...
cp filenameX newfilenameX && tar -rf ./tarname.tar newfilenameX && rm -f newfilenameX
gzip ./tarname.tar

 

Чуть подробнее.

cd ~
mkdir ./maketar 
cd ./maketar 
rm -f ./tarname.tar.gz

 

Тут мы продуем создать в домике раздел maketar, перейти в него и удалить сжатый архив tarname.tar.gz (если скрипт запускается не в первый раз - это целесообразно).

cp filename1 newfilename1 && tar -cf ./tarname.tar newfilename1 && rm -f newfilename1
cp filename2 newfilename2 && tar -rf ./tarname.tar newfilename2 && rm -f newfilename2
...
cp filenameX newfilenameX && tar -rf ./tarname.tar newfilenameX && rm -f newfilenameX

 

Тут мы копируем исходный файл filename1 в newfilename1 (например /tmp/test.doc в ./test.doc, что бы в архиве не создавалось лишних разделов),  добавляем newfilename1 в архив tarname.tar (обращаю внимание, что в первой строке используются флаги -cf (создание архива), а в остальных -rf (добавить файл в архив)), и на последнем шаге файл newfilename1 удаляется (так как дисковое пространство на хостинге так же не резиновое).

gzip ./tarname.tar

 

Тут мы просто сжимаем полученный архив и получайм файл tarname.tar.gz

Что бы все это отработало, в консоли нужно выполнить:

/usr/bin/php script.php > ~/exec.sh && /bin/sh ~/exec.sh && rm -f ~/exec.sh

 

Выполняем php-скрипт, результат записываем в файл exec.sh, выполняем его и удаляем.

Возможно будет интересно: