Temat: zmiana nazwy pliku w locie
Po wielu testach, uzywam takiego kodu jak ponizej.
// Tell proxies not to cache (HTTP 1.1 and 1.0 headers)
header('Cache-Control: no-store, no-cache, must-revalidate',true);
header('Cache-Control: post-check=0, pre-check=0');
header('Pragma: no-cache');
// Content headers
header('Content-Description: File download');
header('Content-Length: '.filesize($target));
header('Content-Type: '.$mime);
header('Content-Disposition: attachment; filename="'.basename($target).'"');
// Go!
readfile_chunked($target);
Pare slow objasnienia:
$target = sciezka do pliku jaki ma zostac wyslany klientowi
$mime = typ MIME pobrany z pomoca finfo
readfile_chunked() - funkcja, ktora wczytuje plik w blokach wielkosci $chunksize bajtow (ponizej). Przy duzych plikach pozwala uniknac problemow z brakiem pamieci dla skryptu. Oryginal jest gdzies w manualu PHP, ja go "troche" przerobilem.
function readfile_chunked($filename,$chunksize=102400) {
// We only read from UPLOAD_DIR defined in config
if (strpos(realpath($filename),UPLOAD_DIR) !== 0) return false;
$chunksize = (int) $chunksize; // just in case
$f = fopen($filename, 'rb'); // try to open the file in binary-read mode
if ($f === false) return false;
while (!feof($f)) echo fread($f, $chunksize);
return fclose($f);
}
Łukasz S. edytował(a) ten post dnia 19.11.09 o godzinie 14:33