konto usunięte

Temat: zmiana nazwy pliku w locie

Jak najprościej to zrobić:
Jest plik do pobrania na serwerze.
Nazwa pobieranego pliku w czasie pobierania musi mieć nazwę np. bieżącej daty.

Czyli plik źródłowy na serwerze jest np. plik.pdf
w czasie pobierania ma mieć nazwę 19112009.pdf
Janusz Skudrzyk

Janusz Skudrzyk Członek zarządu,
weblabs.pl

Temat: zmiana nazwy pliku w locie


<?php
// We'll be outputting a PDF
header('Content-type: application/pdf');

// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');

// The PDF source is in original.pdf
readfile('original.pdf');
?>

tam gdzie "downloaded", tam wstawiasz "'.date( 'dmY' ).'"
Marcin Witek

Marcin Witek isido.pl ułatwia
pracę - polski sytem
zarządzania
projekt...

Temat: zmiana nazwy pliku w locie

Janusz Skudrzyk:
tam gdzie "downloaded", tam wstawiasz "'.date( 'dmY' ).'"

i jeszcze trzeba uważać na IE bo on czasem pobiera nazwę pliku z adresu, nie z nagłówka - nie pomnę już w jakich dokładnie warunkach i jaka wersja, ale wówczas trzeba dodać /nazwa_pliku.pdf na końcu linku.

konto usunięte

Temat: zmiana nazwy pliku w locie

a mod_rewrite nie będzie do tego lepszy?

konto usunięte

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

Temat: zmiana nazwy pliku w locie

to powinno wystarczyc

Następna dyskusja:

Kopiowanie pliku generowane...




Wyślij zaproszenie do