Forum Webscript.Ru
Программирование => PHP => Тема начата: mk от 27 Марта 2003, 21:06:35
-
Собственно сабж.
Можно-ли на сервере разбить архив на части с помощью скрипта? Скрипт на PHP или Perl. Хостинг - Валуй.
Поиск ничего подходящего не дал :(
-
как вариант можно просто глупо порезать на ровненькие части...
открывая fopen и беря по нужному количеству байт и засовывая в новые файлы...
-
Так может уж лучше соответствующую прогу выполнить из скрипта?
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.
-
ClayRabbit
не факт, что есть такая возможность
-
[off] а еще можно разархивировать архив на сервере, разбить полученное содержимое на несколько частей и заархивировать каждую часть в отдельный архив. Во :D [/off]
-
ClayRabbit split не работает. причем как-то странно - при наборе команды не выскакивает что command not found, а просто нет ответа до тех пор пока по таймауту не отвалишся...
nagash Будем пробовать твой вариант, только вот как там юзер все это склеивать будет (архив после разрезки должен по почте уйти...)
-
Господа, поможите плиз еще! Вот написал подобие скриптика, а как переменную обрезать не нашел (я в РНР новичок совсем). Вот скрипт:
$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 байт...
}
?>
-
Все, разобрался. Мож кому пригодиться:
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); //закрываем файл
?>
-
а ещё виндус командером склеивать... =)