Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][Apache]Blokowanie bezpośredniego dostępu do pliku w katalogu
Forum PHP.pl > Forum > PHP
vonski
Witam.

Mam taką sytuację...
Mam plik, powiedzmy o nazwie test.cvs i chciałbym mieć do niego dostęp tylko za pośrednictwem strony www, tzn:
w formularzu wpisuję sobie jakieś hasło, po wysłaniu formularza wpisane hasło porównywane jest z tym w bazie danych - jeśli jest ok - następuje przekierowanie do tego pliku i pojawia się okienko dialogowe do ściągnięcia pliku, jeśli nie - pojawia się komunikat, że hasło jest złe. Generalnie to już działa, tak jak to opisałem, problem w tym, że jeśli ktoś zna nazwę pliku i wpisze sobie domena.com/test.cvs w pasku adresu, to też mu się pojawi okienko do ściągnięcia pliku. Czy jest jakiś sposób, by zablokować bezpośredni dostęp (z pasku adresu) do pliku? .htaccess - dobrze kombinuję? Tylko jak? smile.gif Problem mam dość duży bo w Apache'u potrafię jedynie zrobić przyjazne linki i nic więcej smile.gif
Myślałem jeszcze żeby ewentualnie zablokować dostęp do całego katalogu, w którym znajduje się plik za pomocą autoryzacji HTTP, tylko wtedy hasło musiałoby być w pliku .htpasswd, tak? A ja chce żeby było w bazie i już winksmiley.jpg

Z góry dzięki za odpowiedź.

Pozdrawiam
yevaud
ja bym te wszystkie pliki wrzucil w miejsce do ktorego apache nie ma dostepu(w sensie dostepu publicznego winksmiley.jpg), a dostep do nich zalatwilbym przez jakis skrypt pt "getfile.php?haslo=costam" winksmiley.jpg
plik getfile sprawdzalby czy haslo jest ok i jesli wszystko by gralo najpierw wysylalby odpowiedni header z mime, a pozniej wrzucal zawartosc pliku.

cos w ten desen:

  1. if ($_GET['haslo'] == 'dupa')
  2. {
  3. $file = 'monkey.gif';
  4.  
  5. if (file_exists($file)) {
  6. header('Content-Description: File Transfer');
  7. header('Content-Type: application/octet-stream');
  8. header('Content-Disposition: attachment; filename='.basename($file));
  9. header('Content-Transfer-Encoding: binary');
  10. header('Expires: 0');
  11. header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  12. header('Pragma: public');
  13. header('Content-Length: ' . filesize($file));
  14. flush();
  15. readfile($file);
  16. }
  17. }
unloco
Mam ten sam problem.

Mam drzewo katalogów:
  1. /index.php <!-- katalog główny, tutaj pliki całej strony -->
  2. /galleries/ <!-- tutaj tylko pliki graficzne -->


W jaki sposób mogę zrobić tak aby obraz można było odtworzyć tylko za pomocą konkretnej strony internetowej (dajmy na to www.serwer.pl) (plik otwiera się za pomocą photo_show.php - gdzie jest przeskalowany do 640x480, ale jeśli bym chciał udostępnić użytkownikowi pełny rozmiar pliku to jak to mam zrobić, żeby jednocześnie zablokować dostęp do pliku przy wpisywaniu pełnej ścieżki do adresu?) Chodzi mi o to, że jeśli user nie ma założonego konta na mojej stronie i konto nie jest aktywowane (to akurat umiem bez problemu zrobić) to plik photo_show.php nic mu nie pokaże.

Ale się rozpisałem i zagmatwałem. W skrócie:

Plik photo_show.php wyświetla pełen obraz jednakże przeskalowany jest do rozdzielczości 640x480 aby układ strony nie został zmieniony przez większe obrazy.

Teraz chciałbym zrobić w ten sposób, że:

-zalogowany user (który ma dostęp do zawartości pliku photo_show.php - w innym wypadku ten plik wyświetli komunikat, że musi się zalogować) kliknie w obraz prawym klawiszem myszy i go sobie może zapisać na dysku

ALE

-niezalogowany user jeśli wpisze adres bezpośrednio do pliku NIE MOŻE zobaczyć obrazu.

Da się to załatwić za pomocą htaccess? Bo w tym kierunku skoncentrowałem swoje poszukiwania ale rozwiązania nie potrafię znaleźć.

Z góry dziękuję za pomoc.
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.