Dokumentacja PHP dostarcza ładnego przykładu:
<?php
$file = 'monkey.gif';
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
?>
EDYTUJ (Odpowiedź na komentarz, wyjaśnienie)
header('Content-Description: File Transfer');
Nie wyświetlaj w przeglądarce, ale prześlij plik.
header('Content-Type: application/octet-stream');
header('Content-Transfer-Encoding: binary');
Plik jest plikiem binarnym.
Przeglądarki generalnie pobierają pliki binarne, chyba że mogą je wyświetlić.
header('Content-Disposition: attachment; filename='.basename($file));
Spraw, aby okno dialogowe pobierania wyświetlało prawidłową nazwę pliku.
Uwaga:możesz użyć dowolnej nazwy pliku.
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
Plik nie powinien być buforowany przez przeglądarkę.
Pamięć podręczna może powodować problemy w przypadku zawartości dynamicznej.
header('Content-Length: ' . filesize($file));
Wyślij do przeglądarki prawidłowy rozmiar pliku,
w przeciwnym razie przeglądarka nie będzie w stanie oszacować czasu przesyłania.
ob_clean();
flush();
Upewnij się, że nagłówki są wysyłane do przeglądarki przed rozpoczęciem pobierania.
readfile($file);
Wyślij plik do przeglądarki.
exit;
Gotowe :)