Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: download plików
Forum PHP.pl > Forum > PHP
mrm
Mam następujący problem: chciałbym aby pliki leżące na serwerze, były dostępne do ściągnięcia dopiero po zarejestrowaniu.
Ma to działać w następujący sposób: osoba rejestruje się i pojawia się lista plików. Chodzi mi w jaki sposób ukryć link do pliku, po to aby osoba nie zarejestrowana nie mogła ściągnąc pliku podając link np otrzymany od osoby, która posiada dostęp do strefy zarejestrowanej. (np
Kod
http://domena//file//plik.exe
) Proszę ładnie o pomoc winksmiley.jpg.
nez
Jeden z wielu sposobów:

zapisuj nazwy plików i ścieżki w bazie danych
- niezarejestrowanym wyświetlaj tylko nazwy plików
- zarejestrowanym nazwy podlinkowane do odpowiednich ścieżek (jeszcze lepiej przez skrypt - żeby nikt nie widział dokładnych ścieżek)
chomiczek
Hmm.. a gdybyś pobierł pliki np. poprzez plik, czyli masz plik np download.php
a w np. index.php masz
  1. <a href="donwload.php?plik=nazwaPliku">pobierz</a>


w pliku download.php wystrczy sprawdzić czy użytkownik jest zalogowany, jeśli tak to wysłać mu nagłówek z typem danego pliku.. jesli nie.. wysłać info o tym, że jest niezalogowany..

rozwiązań jest wiele bo mozesz np. określać jaki typ ma dany plik np. dopisując do nazwy 01nazwaPliku1 i potem sprawdzając nazwę pliku mozesz założyć, że najpierw jest 01 potem właściwa nazwa pliku 1 katalog

a u Ciebie to moze być tak:
  1. <?php
  2. if ($rozbite[0]=='01') $katalog = 'osobiste';
  3. if ($rozbite[2]=='1') $typ = 'jpg';
  4. ?>


a potem wywołać zdjęcie z takiej lokalizacji:
  1. <?php
  2. $katalog.'/'.$rozbite[1].'.'.$typ';
  3. ?>


oczywiście należałoby sprawdzic wcześniej logowanie o ktorym mówisz oraz czy plik faktycznie istnieje file_exists()" title="Zobacz w manualu php" target="_manual

Pzdr
RAFpl
Ewentualnie można zrobic tak (bardzo łatwo jest napisać ten skrypt - operacja na plikach + sesja: nie potrzeba mysql):

-Wczytujesz zawartość katologu download do tablicy, a następnie sprawdzasz przez mechanizm sesji czy dana osoba jest zalogowana:
1. TAK - wyświetlasz listę plików, które są jednoczęśnie listą aktywnych linków.
2. NIE - wyświetlasz listę plików, ale bez linków.
mrm
ok zrobilem w ten sposob, nazwy plikow przechowywane sa w bazie danych. zgodnie z sugestia pliki beda pobierane przez plik

Kod
download.php?id=


teraz jednak mam problem z zawartoscia pliku downlaod, oczywiscie najpierw sprawdza czy uzytkownik jest zalogowany, pozniej pobiera nazwe pliku na podstawie id z url-a, pytanie co dalej..., kombinowalem z header i wykombinowalem cos takiego

Kod
header("Location: http://".$_SERVER['HTTP_HOST']
                      ."/".dirname($_SERVER['PHP_SELF'])
                      ."/".$path


(oczywiscie $path przechowuje dostep do pliku - folder i nazwa pliku)

jednak w url-u pojawia sie pelna sciazka dostepu do pliku..

-----
ok cześciowo rozwiązalem ten problem poprzez to ze download.php nie otwiera sie w nowym oknie, tylko w tym samym i juz url nie ma sciezki dostepu do pliku, jednak na dole przegladarki (chyba to sie nazywa status smile.gif ) pojawia sie "trwa pobieranie z witryny" + pelna sciezka... angrysmiley.gif
devnul
rozwiązanie jest proste, ale czasochłonne, po sprawdzeniu uprawnień jeśli user ma prawa to wczytujesz zawartość pliku przez fopen itd, ustawiasz przez header(), odpowiedni typ mime, wielkość danych i nazwe pliku jaką sugerujesz do zapisu, a nastepnie przez echo wywalasz dane do przeglądarki, jeśli natomiast user nie ma dostepu to przekierowujesz na strone z błędem
mrm
musi byc jakiś prostszy spoob tzn mniej czasochlonny ...
-------
hm bez przesady wcale to nie jest czasochlonne

Kod
<?php
header('Content-type: application/[COLOR=red]$typpliku'[/COLOR]);
header('Content-Disposition: attachment; filename="$plik"');
readfile($sciazka);
?>
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.