Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dostęp do plików
Forum PHP.pl > Forum > Serwery WWW
EpureLight
Witam!

Tworzę portal internetowy, na którym stworzyłem system logowania w php. Mam jednak jeden wielki problem. Otóż dla osób zalogowanych oferuje specjalny kontent niewidoczny dla użytkowników niezarejestrowanych. Są to podcasty oraz spakowane pliki w rar i zip. Problem polega na tym, że dostęp do tych plików, mimo systemu logowania jest dostępny z poziomu adresu. Tj. użytkownik nie ma dostępu do zasobów, jednak gdy wpisze w pasek adresu przeglądarki adres docelowy do pliku (np. spakowanego pliku) to może go pobrać i obejrzeć. Czy jest jakiś sposób by temu zapobiec?

Pozdrawiam
d3ut3r
Wydaje mi się, że najprościej wyrzucić pliki poza katalog widoczny z sieci a gdy użytkownik chce plik ściągnąć wysyłać go przez php np. za pomocą readfile i oczywiście odpowiednich nagłówków. Jeżeli nie masz dostępu do katalogu nadrzędnego możesz użyć .htaccess
mat-bi
Po prostu, jak mówi kolega wyżej, daj to do folderu(nawet moze być widoczny z sieci, np. podfolder),ale wszystkie zapytanie przekierowuj na plik php, który będzie sprawdzać prawa do pliku.
EpureLight
Mniej więcej rozumiem jak to ma działać, i rozwiązanie wydaje się proste. Nie mniej jednak nie wiem jak sprawić, by użytkownik wywołujący dany plik był przekierowywany do pliku php który mu albo udostępni albo nie udostępni oglądanie go i pobieranie. W pliku .htaccess da się to w jakiś sposób wyznaczyć? Prosiłbym was o jakąś wskazówkę jak to wykonać lub ew. jakieś nakierowanie na to gdzie takich informacji szukać.
Tak w ogóle to chcę zaznaczyć, że cenie sobie bardzo wasz poświęcony czas wink.gif
binbash
Użytkownik nie ma wywoływać pliku który chce ściągnąć tylko plik php z odpowiednim parametrem identyfikującym ten plik (jeżeli trzymasz ścieżki dostępu do plików gdzieś w bazie to może być np id wiersza np. http://twoja.strona/download.php?file=23). W pliku download.php pobierasz ścieżkę do pliku, wysyłasz odpowiednie nagłówki np.
  1. header('Content-Transfer-Encoding: binary');
  2. header('Content-Type: audio/mpeg');
  3. header("Content-Disposition: attachment; filename=\"".jakas_twoja_nazwa_pliku.".mp3\"");

i w końcu wysyłasz plik np przez:
  1. readfile($twoja_sciezka_do_pliku);

Natomiast w katalogu w którym trzymasz swoje pliki tworzysz plik .htaccess i umieszczasz w nim:
<Files *.*>
order deny,allow
deny from all
</Files>




EpureLight
Rozwiązanie działa lecz mam jeszcze mały problem z wywoływaniem pliku. Chce, by załadowała się strona i na tej stronie ten plik. I teraz gdy to Robie to wychodzi mi jeden z dwóch błędów:

1.Gdy wywołam go na początku to tylko pokazuje się dany obrazek, strona nie.
2.Gdy wywołam go później na swoim miejscu, to wychodzi błąd "headers already send".

Na pewno gdzieś popełniam błąd ale nie mam pojęcia gdzie.
binbash
Nie za bardzo rozumiem, na stronie chcesz porobić linki, tak?
EpureLight
Dobrze, to postaram się lepiej wyjaśnić.

Jest tak. Mam stronę, na której są podstrony z np. obrazkami. Te podstrony są dostępne tyko dla zalogowanych użytkowników. Są tam treści i rzeczy niedostępne dla innych. I teraz problem wygląda tak: Powiedzmy jestem użytkownikiem zalgowanym. Biorę obrazek, patrzę na jego adres docelowy - http://www.jakastrona.pl/chronione/obrazki/obrazek.jpg. Ten adres podaje koledze i ten bez zarejestrowania wpisując ten adres w pasek adresu wyświetla mu się ten obrazek, a nie powinien.

Propozycja z .htaccess w chrorionym folderze załatwiła ten problem. jednak teraz mam taki problem, że gdy jako użytkownik zalogowany ładuję stronę, to ten obrazek, który ma się gdzieś wyświetlać na stronie, nie wyświela sie. Pojawia się ikonka, jakby go w ogóle nie było. Teraz nie wiem jak sprawić, by ten obrazek się załadował. Obrazek ten jest zagnieżdzony na środku strony.
binbash
Ok to może tak, jak masz ten swój plik php gdzie wyświetlasz obrazek to zamiast podawać bezpośrednią ścieżkę do pliku z grafika (tak ci na pewno nie odczyta) to:
  1. echo '<img src="display.php?name=obrazek.jpg>';

A w pliku display.php
  1. readfile('sciezka/do/plikow/'.$_GET['name']);
EpureLight
Super, rozwiązanie bardzo ładnie działa. Dziękuję bardzo za pomoc, sam bym sobie pewnie nie poradził wink.gif

Mam jednak jeszcze jeden problem. Ta metoda nie działa mi z podcastami. Gdy przeglądarka próbuje streamować video to od razu wyskakuje okienko "to view this movie, you must log in in to the area..."
Z obrazkami, tekstem itp działa fanstastycznie, jednak podcasty w moim przypadku są równie ważne. Czy da się to jakoś ominąć ?

Pozdrawiam
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.