PHP podczas wysyłania plików do klienta poprzez ładowanie je funkcją readfile() obcina je do długości 2000000 bajtów i reszta pliku nie zostaje wysłana. Oto sposób jak rozwiązać ten problem (rozwiązanie znalezione na www.php.net):
function readfile_chunked($filename,$retbytes=true)
{
$chunksize = 1*(1024*1024); // how many bytes per chunk
$buffer = '';
$cnt =0;
$handle = fopen($filename, 'rb');
if ($handle === false)
{
return false;
}
while (!feof($handle))
{
$buffer = fread($handle, $chunksize);
echo $buffer;
if ($retbytes)
{
$cnt += strlen($buffer);
}
}
$status = fclose($handle);
if ($retbytes && $status)
{
return $cnt; // return num. bytes delivered like readfile() does.
}
return $status;
} |
Następnie w naszych skryptach zamiast readfile() uzywamy readfile_chunked(). Funkcja ta dzieli plik na 1Mb fragmenty i laduje je w sposób selektywny. Zasada wywoływania i działania jest identyczna jak w funkcji readfile().