Автор Тема: как разбить архив на части на сервере с помощью скрипта?  (Прочитано 4455 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн mk

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 9
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Собственно сабж.
Можно-ли на сервере разбить архив на части с помощью скрипта? Скрипт на PHP или Perl. Хостинг - Валуй.
Поиск ничего подходящего не дал :(

Оффлайн nagash

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 341
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.nagash.org
как вариант можно просто глупо порезать на ровненькие части...
открывая fopen и беря по нужному количеству байт и засовывая в новые файлы...

Оффлайн ClayRabbit

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 43
  • +0/-0
  • 0
    • Просмотр профиля
    • http://ruweb.net
Так может уж лучше соответствующую прогу выполнить из скрипта?
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

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
ClayRabbit
не факт, что есть такая возможность
AS IS...

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
[off] а еще можно разархивировать архив на сервере, разбить полученное содержимое на несколько частей и заархивировать каждую часть в отдельный архив. Во :D [/off]
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн mk

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 9
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
ClayRabbit split не работает. причем как-то странно - при наборе команды не выскакивает что command not found, а просто нет ответа до тех пор пока по таймауту не отвалишся...

nagash Будем пробовать твой вариант, только вот как там юзер все это склеивать будет (архив после разрезки должен по почте уйти...)

Оффлайн mk

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 9
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Господа, поможите плиз еще! Вот написал подобие скриптика, а как переменную обрезать не нашел (я в РНР новичок совсем). Вот скрипт:
<?php
$fp
=fopen($filename"r");
	
	
	
//открываем файл
$contents fread ($fpfilesize ($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$contents100000);
	
	
//пишем в него содержимое
fclose ($fp1);
	
	
	
	
	
//закрываем файл
//вот здесь надо отрезать от $contents те самые 100000 байт...
}
?>

Оффлайн mk

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 9
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Все, разобрался. Мож кому пригодиться:
<?php
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 ($fpfilesize ($filename));
	
//считываем содержимое в переменную
$fp1=fopen($newfilename"w+");
	
	
	
//открываем новый файл
echo "открыли файл $newfilename.
"

fwrite ($fp1$contents1000000);
	
	
//пишем в него содержимое
echo "записали в файл $newfilename.
"
;
fclose ($fp1);
	
	
	
	
	
//закрываем файл

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


А вот для склейки частей:
<?php
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 ($fpfilesize ($partname));
	
//считываем содержимое в переменную
fclose ($fp);
	
	
	
	
	
//закрываем файл
unlink($partname);
fwrite ($fp1$contents);
	
	
//пишем содержимое
echo "записали в файл $filename.
"
;
$size=filesize ($filename);
echo 
"Длина файла $filename $size.
"
;
}
fclose ($fp1);
	
	
	
	
	
//закрываем файл
?>

Оффлайн nagash

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 341
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.nagash.org
а ещё виндус командером склеивать... =)

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28