Загрузка файлов на сервер по частям
Ввиду ограничений, установленных в конфигурации PHP на сервере директивой upload_max_filesize, не представляется возможным загрузить файл большого размера через web-форму. В таком случае можно поступить так: разбить файл на части, загрузить по частям, и собрать из отдельных частей снова в единый файл.
Допустим, имеется файл big_file.zip, который необходимо разбить на части по 10 Kb. Напишем сценарий, выполняющий эту задачу:
<?php
// Имя файла
$filename = 'big_file.zip';
// Разбиваем файл на части по 10 Kb
$piece = 10000;
// Открываем исходный файл для чтения
$fp = fopen($filename, "r");
// Читаем содержимое файла в буфер
$bufer = fread($fp, filesize($filename));
// Закрываем файл
fclose($fp);
// Подсчитываем число частей, на которые необходимо разбить файл
$count = (int)filesize($filename)/$piece;
if((float)(filesize($filename)/$piece) - $count != 0) $count++;
// В цикле разбиваем содержимое файла в переменной
// $bufer на части
for($i=0; $i<$count; ++$i)
{
$part = substr($bufer,$i*$piece,$piece);
// Сохраняем текущую часть в отдельном файле
$fp = fopen("big_file.part".$i,"w");
fwrite($fp,$part);
fclose($fp);
}
?>
Скрипт разбивает файл на несколько частей, каждая из которых получает расширение *.partN (где N – подрядковый номер части).
Теперь напишем сценарий, решающий обратную задачу – склейку файла из отдельных частей:
<?php
$buffer = "";
for($i=0; $i<100000; ++$i)
{
// Генерируем имя файла
$filename = "big_file.part".$i;
// Если такой файл существует,
// добавляем его содержимое к $buffer
if(file_exists($filename))
{
$fp = fopen($filename,"r");
$buffer .= fread($fp,filesize($filename));
fclose($fp);
}
else
{
// Если файла с таким именем не
// существует, выходим из цикла
break;
}
// Склеенные в переменной $bufer
// части помещаем в конечный файл
$fp = fopen("file_final.zip","w");
fwrite($fp, $buffer);
fclose($fp);
}
?>





июля 21, 2008 at 11:03
Очень удобно получается. Спасибо использую..
марта 15, 2010 at 22:45
Товарищи, помогите пожалуйста!!
Как все это дело прикрепить к форме, в которой пользователь выбирает файл и после нажатия на кнопку файл разбивается на части, после этого части закачиваются на сервер, а там уже и соединяются.
мая 28, 2010 at 19:02
>>Как все это дело прикрепить к форме, в которой пользователь выбирает…
А никак! Это бредятина какая-то. Разбивка и склейка по этим скриптам выполняется только на сервере. ЗАЧЕМ?
P.S. В килобайте 1024 байт, а не 1000
июня 7, 2010 at 11:02
2Николай: на стороне клиента (браузера) используй java
Добавить комментарий
Вы должны войти