Лекции     Книги     Рефераты    
Диплом, курсовая на заказ

Загрузка файлов на сервер по частям

news date июля.07.2008    categories Web-программирование > PHP    comments (4)

Ввиду ограничений, установленных в конфигурации 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);
}
?>

Обсуждения

4 комментариев к “Загрузка файлов на сервер по частям”
  1. AlexDIXI пишет:

    Очень удобно получается. Спасибо использую..

  2. Николай пишет:

    Товарищи, помогите пожалуйста!!
    Как все это дело прикрепить к форме, в которой пользователь выбирает файл и после нажатия на кнопку файл разбивается на части, после этого части закачиваются на сервер, а там уже и соединяются.

  3. WinBond пишет:

    >>Как все это дело прикрепить к форме, в которой пользователь выбирает…

    А никак! Это бредятина какая-то. Разбивка и склейка по этим скриптам выполняется только на сервере. ЗАЧЕМ?

    P.S. В килобайте 1024 байт, а не 1000

  4. Alexandro пишет:

    2Николай: на стороне клиента (браузера) используй java

Добавить комментарий

Вы должны войти



© 2009 - 2010 | Webteach.ru | Образовательный портал