PHP - prosty skrypt do pobrania
Tworzę prosty skrypt do pobrania, w którym moi użytkownicy mogą pobierać własne zdjęcia itp.
Ale mam jakiś dziwny problem.
Kiedy pobrałem plik, ma on zawartość z mojego pliku index.php bez względu na rodzaj pobranego pliku .. Mój kod jest taki:
$fullPath = $r['snptFilepath'] . $r['snptFilename'];
if (file_exists($fullPath)) {
#echo $fullPath;
// setting headers
header('Content-Description: File Transfer');
header('Cache-Control: public'); # needed for IE
header('Content-Type: '.$r['snptFiletype'].'');
header('Content-Disposition: attachment; filename='. $filename . '.' . $r['snptExtension']);
header('Content-Length: '.$r['snptSize'].'');
readfile($fullPath)or die('error!');
} else {
die('File does not exist');
}
$ r jest wynikiem z mojej bazy danych, w której zapisałem rozmiar, typ, ścieżkę itp. podczas przesyłania pliku.
AKTUALIZACJA
Podczas przesyłania i pobierania plików * .pdf działa z powodzeniem. Ale kiedy próbuję pobrać * .zip i tekst / rtf, text / plain działa dziwnie.
To dziwne, to znaczy: pobiera pełny plik index.php z zawartością pobranego pliku wewnątrz niego.
ODPOWIEDŹ
Skopiowałem to zhttp://php.net/manual/en/function.readfile.php i teraz działa. Wydaje się, że: ob_clean (); zrobiłem sztuczkę! Dzięki za pomoc wszystkim.
#setting headers
header('Content-Description: File Transfer');
header('Content-Type: '.$type);
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;