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

dima333

Новичок
Всем доброе утро.
Возникла необходимость разрезать архив размером более 100 Мб на части каждый из которых не более 50 Мб.
Как это можно реализовать? Мозг уже кипит, так ничего и не получается придумать.
 

phprus

Moderator
Команда форума
man 1 split ?
В смысле в командной строке набрать и посмотреть на результат.
 

dima333

Новичок
phprus так не пойдёт.
А можно как нибудь еще раз в пхп упакавать архив, но чтобы создалось несколько архивов по 40 МБ?
 

vovanium

Новичок
Для начала ахивы бывают разные (zip, rar, 7zip и т.п.), и далеко не все из них поддерживают многотомность.
 

vovanium

Новичок
PHP поддерживает zip, в котором нет многотомности. Можешь с помощью системных вызовов заюзать rar, но нужно чтобы он еще установлен был.
 

dima333

Новичок
vovanium системные вызовы запрещены на хостинге. А вообще как нибудь разделить файл можно?
 

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);
	}
}
 
Сверху