Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Pobieranie pliku - nagłówek
Forum PHP.pl > Forum > Przedszkole
Mody23
Witam!

Co jest nie tak z tym nagłówkiem:

  1. if ( isset($_GET['download']) )
  2. {
  3. $file_id = htmlspecialchars($_GET['download']);
  4. $sql = "SELECT * FROM `download` WHERE file_name = '".$file_id."'";
  5. $result = mysql_query($sql)
  6. or die("Nie udalo sie pobrac danych");
  7. $num = mysql_num_rows($result);
  8. if ( $num > 0 )
  9. {
  10. $row = mysql_fetch_assoc($result);
  11. header('Content-Type: application/x-unknown');
  12. header('Content-Disposition: attachment; filename="'.$row['file_name_type'].'"');
  13. readfile('./upload/'.$row['file_name_type'].'');
  14. }


Że nie dość iż pobiera plik, to dorzuca do niego na dole źródło strony? Po prostu plik po pobraniu wygląda tak:

  1. [ZAWARTOSC]
  2. ...
  3. [KOD ZRODLOWY STRONY]
  4. ...


Gdzie jest błąd?
i-skrypty.pl
spróbuj tak jak masz tutaj: http://www.php.net/readfile
mortus
Może to właśnie wina tego typu zawartości w nagłówku, to jest application/x-unknown. Dlaczego właśnie ten mime type jest ustawiony? Przecież możesz pobrać właściwy mime type pliku używając chociażby funkcji finfo_file() i w zależności od tego, co otrzymasz, ustawiasz odpowiedni mime type pobieranego pliku.

Sprawdź, czy włączenie buforowania wyjścia poradzi sobie z zapisywaniem kodu PHP do pliku. Na początku użyj ob_start(), a na końcu ob_end_flush(). Powinno wystarczyć.
Mody23
Zrobilem tak:

  1. header('Content-Type: application/x-unknown');
  2. header('Content-Disposition: attachment; filename="'.$row['file_name_type'].'"');
  3. readfile('./upload/'.$row['file_name_type'].'');


Ale nadal nic. W zasadzie ja zezwalam na dodawanie wszystkich możliwych rozszerzeń. Ale bez tego:

  1. header('Content-Type: application/x-unknown');


Jest nadal to samo ;/
mortus
ob_start() - na początku pliku
ob_end_flush() - na końcu pliku

Przecież pisałem, że mime type pliku można rozpoznać.
Mody23
finfo_open(); wymaga php 5.3, czego moj serwer nie spelnia ;/ Jakies propozycje inne ? Czym to sprawdzic?

Pomogli mi na innym forum. Wystarczyło dopisać po tych header'ach die();. Tyle.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.