Forum Webscript.Ru

Программирование => PHP => Тема начата: mk от 27 Марта 2003, 21:06:35

Название: как разбить архив на части на сервере с помощью скрипта?
Отправлено: mk от 27 Марта 2003, 21:06:35
Собственно сабж.
Можно-ли на сервере разбить архив на части с помощью скрипта? Скрипт на PHP или Perl. Хостинг - Валуй.
Поиск ничего подходящего не дал :(
Название: как разбить архив на части на сервере с помощью скрипта?
Отправлено: nagash от 27 Марта 2003, 21:34:25
как вариант можно просто глупо порезать на ровненькие части...
открывая fopen и беря по нужному количеству байт и засовывая в новые файлы...
Название: как разбить архив на части на сервере с помощью скрипта?
Отправлено: ClayRabbit от 27 Марта 2003, 22:52:24
Так может уж лучше соответствующую прогу выполнить из скрипта?
bash-2.05a$ split --help
Usage: split [OPTION] [INPUT [PREFIX]]
Output fixed-size pieces of INPUT to PREFIXaa, PREFIXab, ...; default
PREFIX is `x\'.  With no INPUT, or when INPUT is -, read standard input.

Mandatory arguments to long options are mandatory for short options too.
  -a, --suffix-length=N   use suffixes of length N (default 2)
  -b, --bytes=SIZE        put SIZE bytes per output file
  -C, --line-bytes=SIZE   put at most SIZE bytes of lines per output file
  -l, --lines=NUMBER      put NUMBER lines per output file
      --verbose           print a diagnostic to standard error just
                            before each output file is opened
      --help     display this help and exit
      --version  output version information and exit

SIZE may have a multiplier suffix: b for 512, k for 1K, m for 1 Meg.
Название: как разбить архив на части на сервере с помощью скрипта?
Отправлено: ThE0ReTiC от 28 Марта 2003, 00:42:02
ClayRabbit
не факт, что есть такая возможность
Название: как разбить архив на части на сервере с помощью скрипта?
Отправлено: Макс от 28 Марта 2003, 01:08:46
[off] а еще можно разархивировать архив на сервере, разбить полученное содержимое на несколько частей и заархивировать каждую часть в отдельный архив. Во :D [/off]
Название: как разбить архив на части на сервере с помощью скрипта?
Отправлено: mk от 28 Марта 2003, 11:05:35
ClayRabbit split не работает. причем как-то странно - при наборе команды не выскакивает что command not found, а просто нет ответа до тех пор пока по таймауту не отвалишся...

nagash Будем пробовать твой вариант, только вот как там юзер все это склеивать будет (архив после разрезки должен по почте уйти...)
Название: как разбить архив на части на сервере с помощью скрипта?
Отправлено: mk от 28 Марта 2003, 12:57:40
Господа, поможите плиз еще! Вот написал подобие скриптика, а как переменную обрезать не нашел (я в РНР новичок совсем). Вот скрипт:
$fp=fopen($filename, "r"); //открываем файл
$contents = fread ($fp, filesize ($filename)); //считываем содержимое в переменную
$parts=round(filesize ($filename)/100000); //число частей архива по ~1 Мб  
fclose ($fp); //закрываем файл
$i=0;
for ($i = 0; $i <= $parts; $i++) { //цикл по кол-ву частей архива
$newfilename=$filename . $i; //задаем имя файла    
$fp1=fopen($newfilename, "w+"); //открываем новый файл
fwrite ($fp1, $contents, 100000); //пишем в него содержимое
fclose ($fp1); //закрываем файл
//вот здесь надо отрезать от $contents те самые 100000 байт...
}
?>
Название: как разбить архив на части на сервере с помощью скрипта?
Отправлено: mk от 30 Марта 2003, 22:33:04
Все, разобрался. Мож кому пригодиться:
ini_set ("memory_limit", "50M");
error_reporting (E_ALL);
$fp=fopen($filename, "r"); //открываем файл
$parts=round(filesize ($filename)/1000000); //число частей архива по ~1 Мб
echo "открыли файл $filename, будем бить на $parts+1 частей.
";  
$b=0;
for ($i = 0; $i <= $parts; $i++) { //цикл по кол-ву частей архива
$newfilename=$filename . $i; //задаем имя файла    
fseek ($fp, $b);
$b=$b+1000000;
$contents = fread ($fp, filesize ($filename)); //считываем содержимое в переменную
$fp1=fopen($newfilename, "w+"); //открываем новый файл
echo "открыли файл $newfilename.
";
fwrite ($fp1, $contents, 1000000); //пишем в него содержимое
echo "записали в файл $newfilename.
";
fclose ($fp1); //закрываем файл

}
fclose ($fp); //закрываем файл
?>

А вот для склейки частей:
ini_set ("memory_limit", "50M");
error_reporting (E_ALL);
$fp1=fopen($filename, "w+"); //открываем новый файл
echo "открыли файл $filename.
";
for ($i = 0; $i <= $parts; $i++) { //цикл по кол-ву частей архива
$partname=$filename . $i; //задаем имя части архива
$fp=fopen($partname, "r"); //открываем часть архива
echo "открыли файл $partname.
";    
$contents = fread ($fp, filesize ($partname)); //считываем содержимое в переменную
fclose ($fp); //закрываем файл
unlink($partname);
fwrite ($fp1, $contents); //пишем содержимое
echo "записали в файл $filename.
";
$size=filesize ($filename);
echo "Длина файла $filename $size.
";
}
fclose ($fp1); //закрываем файл
?>
Название: как разбить архив на части на сервере с помощью скрипта?
Отправлено: nagash от 31 Марта 2003, 04:22:54
а ещё виндус командером склеивать... =)