Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: header("Location: $plik"); - nie widzi pliku...
Forum PHP.pl > Forum > Przedszkole
matis
Jako, że jest to mój pierwszy post to na wstępie: Witam wszystkich smile.gif

Tworzę sobie kawałek kodu, który umożliwia download plików, ale tylko po zalogowaniu. Wpadłem na pomysł, żeby katalog, w którym trzymam pliki przenieść powyżej DocumentRoot. Na forum znalazłem podobne rozwiązania. Niby wszystko działa, tzn plik podczas upload-u jest przenoszony do odpowiedniego katalogu:

  1. <?php
  2. //zapisz plik
  3. move_uploaded_file($plik_tmp,"/home/mateusz/files/$nowy_plik");
  4. chmod("/home/mateusz/files/$nowy_plik",0755);
  5. ?>


Dane o plikach są trzymane w bazie. Link do pliku wygląda tak:

  1. <?php
  2. echo "<td><a href='download_file.php?file_id=$nazwa_pliku'>$nazwa_pliku</a></td>";
  3. ?>


Następnie w pliku download_file.php mam kawałek kodu:

  1. <?php
  2. session_start(); //start sesji - pobierz zmienne sesji
  3. $autoryzowany = $_SESSION['autoryzowany'];
  4. //jesli ktos wywolal download_file.php
  5. if($autoryzowany != 1){
  6. $_SESSION['error_msg'] = "Nie masz dostępu do tego pliku. Zaloguj się.";
  7. echo header("Location: error.php");
  8.  exit();
  9. }
  10. else{
  11. $file_id = $_REQUEST['file_id'];
  12. $plik = "/home/mateusz/files_G2/$file_id";
  13. header("Location: $plik");
  14. }
  15. ?>


Niestety powyższy kod prowadzi do błędu ($file_id = "winamp.exe") :

  1. Not Found
  2. The requested URL /home/mateusz/files_G2/winamp.exe was not found on this server.


Prawa do plików - 755, prawa do katalogu z plikami - 777

Co robie źle? Podejrzewam, że nieodpowiednio używam f-cji header(). Jak więc zapisać plik? Czy koniecznie muszę bawić sie w jakieś zczytywanie linijek w pętlach? Nie ma w php jakieś hunkcji, ktora po prostu podaje plik do ściągnięcia?
Z góry bardzo dziękuje i pozdrawiam
Ludvik
Nagłówek header jest wskazówką dla przeglądarki, gdzie ma zostać przekierowany użytkownik, więc cała komunikacja i tak odbywa się z serwerem http, który nie pozwoli na ominięcie DocumentRoot. Poza tym, podajesz klientowi ścieżkę do pliku, ale w systemie plików serwera, a to nie zadziała przez http.
matis
Cytat(Ludvik @ 24.09.2006, 15:25:31 ) *
Nagłówek header jest wskazówką dla przeglądarki, gdzie ma zostać przekierowany użytkownik, więc cała komunikacja i tak odbywa się z serwerem http, który nie pozwoli na ominięcie DocumentRoot. Poza tym, podajesz klientowi ścieżkę do pliku, ale w systemie plików serwera, a to nie zadziała przez http.


Dziękuje za odpowiedź. Co więc propoznujesz? Jak dostać się do pliku, który jest poza DocumentRoot, a którego nazwa znajduje się w bazie?
UDAT
  1. <?php
  2. session_start(); //start sesji - pobierz zmienne sesji
  3. $autoryzowany = $_SESSION['autoryzowany'];
  4. //jesli ktos wywolal download_file.php
  5. if($autoryzowany != 1){
  6. $_SESSION['error_msg'] = "Nie masz dostępu do tego pliku. Zaloguj się.";
  7. echo header("Location: error.php");
  8.  exit();
  9. }
  10. else{
  11. $file_id = $_REQUEST['file_id'];
  12. readfile ("/home/mateusz/files_G2/$file_id" );
  13. }
  14. ?>
matis
Bardzo dziękuję za odpowiedź

powyższy kod działa, ale otwiera plik,a nie go zapisuje na dysku...
Co zrobić, żeby pliki były zapisywane?

EDITED: Ok, poradziłem sobie - wszystko jest na tym forum.

Jedno i ostatnie pytanie - czemu nie zawsze wyświetlają się poprawne ikonki w okienku do ściągania?
Dla przykładu - gdy ściągam plik jpg to wyświetla się ikonka z niepowiązanym programem...
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.