Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobieranie plików po zalogowaniu
Forum PHP.pl > Forum > PHP
johny-cage
Zastanawiam się jak zrobić taką rzecz by uzytkownik miał dostęp do plików do pobrania dopiero po zalogowaniu. Samo logowanie to nie problem jednak 'odkryłem' jedną rzecz. Jeżeli skrypt PHP wyświetla listę plików do pobrania to po wylogowaniu wystarczy znać ścieżkę dostepu do tego pliku i można go pobrać bez potrzeby logowania.

Ktoś ma może pomysł jak zrobić by pobierać można było tylko po zalogowaniu? Ja osobiście mysłałem o tym by w jakiś sposób po zalogowaniu katalogowi nadawać prawa do odczytu lub coś takiego. Z góry dziekuje za pomoc.
kiler129
Jest to bardzo proste - nie dawaj dostępu do ścieżki biggrin.gif
Zrób sobie taki np. plik download.php

TUTAJ SPRAWDZANIE ZALOGOWANIA
TUTAJ WYPISANE ID i ODPOWIEDNIE DO NICH PLIKKI
TUTAJ USTAWIASZ NAGŁÓWEK
TERAZ INCLUDE 'PLIK.EXE';

To w zasadzie tyle smile.gif
Teraz nikt nie pozna ścieżki smile.gif
Możesz też zrobić logowanie przez htacess i wtedy nawet przy wpisaniu sxiezki sie zapyta o haslo i login smile.gif W razie problemów pisz na PW smile.gif
mike
OMG, można dużo prościej.

1. Robisz plik w stylu download.php;
2. Odpalasz go przekazując mu jakiś identyfikator pliku (pliki ścieżki plików i nazwy sa zapisane w bazie) na przykład: download.php?id=123;
3. Sprawdzasz czy użyszkodnik jest zalogowany, jeśli nie, to wywalasz komunikat o tym. Jeśli tak, to wczytujesz dane pliku z bazy a w skrypcie robisz coś w stylu (przykład z manuala):
  1. <?php
  2. // przesyłamy plik PDF
  3. header('Content-type: application/pdf');
  4.  
  5. // ustawiamy jego nazwę na downloaded.pdf
  6. header('Content-Disposition: attachment; filename="downloaded.pdf"');
  7.  
  8. // treść znajduje się w pliku original.pdf
  9. readfile('original.pdf');
  10. ?>


I po sprawie. Użytkownik sprawdzony, plik wysłany.
Siemion
ewentualnie mod rewrite + virtual/readfile
Wygląda dużo ładniej ;-)
johny-cage
No dzięki za tak liczną odpowiedź. Stestuje wasze rady i najwyżej pozawracam głowe później. Pozdrawiam.
colinQ
Ja bym to zrobil tak:

  1. <?php
  2. <form action=...><input type=text...><input type=passowrd...>
  3. ?>

i taki formularzyk który by odsyłał cię na ta stronę na której jesteś.

Później wczytanie danych, sprawdzenie czy istnieja jezeli tak to kontynulacja kodu jezeli nie to komunikat, dodanie sesji, porównanie ich z danymi z bazy lub pliku.

Do każdego pliku zrobiłbym wczytanie sesji i identyfikator np. plik.php?pobierz_plik=nazwa_pliku.
johny-cage
Cytat(colinQ @ 15.05.2007, 23:41:41 ) *
Ja bym to zrobil tak:

  1. <?php
  2. <form action=...><input type=text...><input type=passowrd...>
  3. ?>

i taki formularzyk który by odsyłał cię na ta stronę na której jesteś.

Później wczytanie danych, sprawdzenie czy istnieja jezeli tak to kontynulacja kodu jezeli nie to komunikat, dodanie sesji, porównanie ich z danymi z bazy lub pliku.

Do każdego pliku zrobiłbym wczytanie sesji i identyfikator np. plik.php?pobierz_plik=nazwa_pliku.


Wiem jak zrobić logowanie oparte na sesji i bazach danych.

Jeżeli chodzi o "readfile" to oczywiście plik jest ładowany ale ścieżka jest do podejzenia wiec takie rozwiązanie odpada. Nie bardzo wiem o co chodzi z "include" bo ta komenda ładuje inny plik PHP a nie dowolny plik (np. *.doc)
mike
Cytat(johny-cage @ 16.05.2007, 07:33:22 ) *
Jeżeli chodzi o "readfile" to oczywiście plik jest ładowany ale ścieżka jest do podejzenia wiec takie rozwiązanie odpada.
Nie prawda.
readfile() bez problemu może wczytać plik, który znajduje się w lokalizaji określonej w skrypcie (bądź pobranej z bazy) a tego podejrzeć się nie da.
Bo niby jak podejrzysz plik .php?
Skup sie na rozwiązaniu zaproponowanym przeze mnie kilka postów wyżej, jest ono poprawne i najlepsze.
Siemion
Cytat(mike_mech @ 16.05.2007, 08:03:50 ) *
Skup sie na rozwiązaniu zaproponowanym przeze mnie kilka postów wyżej, jest ono poprawne i najlepsze.


Wcale nei jest najlepsze. Nie słuchaj go - to leniwy moderator jest ;-)
Najlepsze jest rozwiązanie, gdy link bezpośredni ma skłądnie http://serwer/folder_plikow/plik.np.jpg
Można to zrobić w prosty sposób, za pomocą mod rewrite i funkcji virtual lub readfile. Do tego oczywiscie sesja itp...
johny-cage
Cytat(mike_mech @ 16.05.2007, 08:03:50 ) *
Bo niby jak podejrzysz plik .php?

Pliku PHP nie podejrzysz i ja wcale nie napisałem że mozna podejrzeć plik PHP. Napisłaem że można w ogóle podejrzeć skąd jest plik pobierany. Otórz W Foxie przy pobieraniu plikow otwiera się okienko (otwórz za pomocą/zapisz) i tam jest podane skąd plik pochodzi. Zatem łatwo w ten sposób odczytać ścieżkę.

Ja myślałem o takim może rozwiązaniu które na chwilę nadawało by katalogowi lub plikowi atrybut do odczytu (czyli zmieniło mu CHMOD). Co o tym myślicie?
mike
Cytat(johny-cage @ 16.05.2007, 08:20:06 ) *
Napisłaem że można w ogóle podejrzeć skąd jest plik pobierany.
Czytaj z ruchu warg: G Ó W N O P R A W D A exclamation.gif!

Jesteś najgorszym typem użytkownika jaki trafia się na forum.
Nie wiesz a kwestionujesz wiedzę tych, którzy Ci udzielają odpowiedzi.

Jakbyś chociaż sprawdził to byś nie pieprzył głupot.

Masz kod:
  1. <?php
  2.  
  3. header('Content-type: application/pdf');
  4.  
  5. header('Content-Disposition: attachment; filename="generics-tutorial.pdf"');
  6.  
  7. readfile('ukryty_folder/generics-tutorial.pdf');
  8.  
  9. ?>

I przykład: http://michalmech.pl/_example

Pokaż mi teraz skąd jest ściągany plik.
Pomijam to że widać to w kodzie. Ale tylko z kodu jesteś w stanie to wiedzieć.

Każda aplikacja powie Ci że źródłem tego pliku jest: http://michalmech.pl/_example/ a nie http://michalmech.pl/_example/ukryty_folder gdzie naprawdę plik się znajduje.

A pomysł z CHMODEm jest zły.
johny-cage
Cytat(mike_mech @ 16.05.2007, 10:46:13 ) *
Czytaj z ruchu warg: G Ó W N O P R A W D A exclamation.gif!

Jesteś najgorszym typem użytkownika jaki trafia się na forum.
Nie wiesz a kwestionujesz wiedzę tych, którzy Ci udzielają odpowiedzi.


Złość pięknoćści szkodzi złociutka (a może złociutki bo aviatar jest homo niepewny). Nie każdy musi znać ie na wszystkim.

Cytat(mike_mech @ 16.05.2007, 10:46:13 ) *
Jakbyś chociaż sprawdził to byś nie pieprzył głupot.


Sprawdziłem, użyłem twojego kodu z poprzednich odpowiedzi i było widać ścieżkę zatem więc nie ma co sie pienić. Nie lubisz odpowiadać na pytania to nie odpowiadaj, proste. Zadaje głupie pytania bo nie wiem. Po co ta agesja. Teraz ja moge odpowiedzieć że jesteś najgorszym typem moderatora.


Moge zapisać plik jednak gdy chcę go bezpośrednio otworzyć Wordem dostaje taki oto komunikat:
Warning: readfile() has been disabled for security reasons in ...
jaskooo
Nie wiem co robie źle, ale jak wpisuje kod aby ściągnął plik to wyświetla mi sie jego zawartość zamiast ściągania.

Oto kod:

  1. <?php
  2.  
  3. header('Content-type: application/pdf');
  4.  
  5. header('Content-Disposition: attachment; filename="prin.pdf"');
  6.  
  7. readfile('prin.pdf');
  8.  
  9. ?>


Pomocy smile.gif


P.S Nawet sciagnalem plik wystawiony przez @mike i skopiowalem jego kod. Efekt taki sam smile.gif
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.