Ограничение на размер загружаемого через PHP файла

5. Техническая поддержка > WEB > PHP
параметр upload_max_filesize = 10Мb.
Файлы большего размера можно загружать следующим способом:

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

Add Feedback