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;

questionAnswers(2)

yourAnswerToTheQuestion