Разбитие архива

  • Автор темы Автор темы dima333
  • Дата начала Дата начала

dima333

Новичок
Всем доброе утро.
Возникла необходимость разрезать архив размером более 100 Мб на части каждый из которых не более 50 Мб.
Как это можно реализовать? Мозг уже кипит, так ничего и не получается придумать.
 
man 1 split ?
В смысле в командной строке набрать и посмотреть на результат.
 
phprus так не пойдёт.
А можно как нибудь еще раз в пхп упакавать архив, но чтобы создалось несколько архивов по 40 МБ?
 
Для начала ахивы бывают разные (zip, rar, 7zip и т.п.), и далеко не все из них поддерживают многотомность.
 
PHP поддерживает zip, в котором нет многотомности. Можешь с помощью системных вызовов заюзать rar, но нужно чтобы он еще установлен был.
 
vovanium системные вызовы запрещены на хостинге. А вообще как нибудь разделить файл можно?
 
Читаешь файл по частям и пишешь в новые файлы с контролем размера, примерно так, разбивает файл на части по 4 МБ
PHP:
file_split('g:/tmp/tmp.rar', 4);

function file_split($file, $partsize = 10){
	$partsize *= 1048576;
	$fh = fopen($file, 'rb');
	$fileinfo = pathinfo($file);
	$part = 1;
	$size = 0;
	$filename = "{$fileinfo['dirname']}/{$fileinfo['filename']}.p%02d.{$fileinfo['extension']}"; 
	$fp = fopen(sprintf($filename, $part), 'wb');
	while($s = fread($fh, 61440)){
		$size += strlen($s);
		if($size >= $partsize){
			$size = $size - $partsize;
			fwrite($fp, substr($s, 0, -$size));
			$part++;
			$s = substr($s, -$size);
			$fp = fopen(sprintf($filename, $part), 'wb');
		}
		fwrite($fp, $s);
	}
}
 
Сверху