При создании онлайн-системы управления файлами, и теперь я попал в блок.
Я пытаюсь нажать файл клиенту, используя эту модифицированную версию файла readfile :
function readfile_chunked($filename,$retbytes=true) { $chunksize = 1*(1024*1024); // how many bytes per chunk $buffer = ''; $cnt =0; // $handle = fopen($filename, 'rb'); $handle = fopen($filename, 'rb'); if ($handle === false) { return false; } while (!feof($handle)) { $buffer = fread($handle, $chunksize); echo $buffer; ob_flush(); flush(); if ($retbytes) { $cnt += strlen($buffer); } } $status = fclose($handle); if ($retbytes && $status) { return $cnt; // return num. bytes delivered like readfile() does. } return $status; }
Но когда я пытаюсь загрузить 13-мегабайтный файл, он просто разбивается на 4 МБ. В чем проблема? Это определенно не ограничение времени, потому что я работаю в локальной сети, и скорость не является проблемой.
Предел памяти в PHP установлен в 300 МБ.
Спасибо за любую помощь.
Скорее всего, вы нажимаете ограничение на буфер ответа, установленное вашим веб-сервером. Известно, что IIS и FastCGI имеют размер 4 МБ по умолчанию. Я бы начал поиск с поиска в конфигурации веб-сервера <-> PHP SAPI.
НЕ очищайте выходные данные, но будьте осторожны, а затем отправляйте их клиенту в один кусок.
ob_clean(); // in case anything else was buffered ob_start(); // do read/echo operations ob_end_flush();