Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pobieranie plików po zalogowaniu
johny-cage
post
Post #1





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 15.05.2007

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
kiler129
post
Post #2





Grupa: Zarejestrowani
Postów: 566
Pomógł: 35
Dołączył: 21.06.2006

Ostrzeżenie: (0%)
-----


Jest to bardzo proste - nie dawaj dostępu do ścieżki (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Teraz nikt nie pozna ścieżki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Możesz też zrobić logowanie przez htacess i wtedy nawet przy wpisaniu sxiezki sie zapyta o haslo i login (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) W razie problemów pisz na PW (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
mike
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Siemion
post
Post #4





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 13.05.2007

Ostrzeżenie: (0%)
-----


ewentualnie mod rewrite + virtual/readfile
Wygląda dużo ładniej ;-)
Go to the top of the page
+Quote Post
johny-cage
post
Post #5





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 15.05.2007

Ostrzeżenie: (0%)
-----


No dzięki za tak liczną odpowiedź. Stestuje wasze rady i najwyżej pozawracam głowe później. Pozdrawiam.
Go to the top of the page
+Quote Post
colinQ
post
Post #6





Grupa: Zarejestrowani
Postów: 340
Pomógł: 2
Dołączył: 25.12.2006

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
johny-cage
post
Post #7





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 15.05.2007

Ostrzeżenie: (0%)
-----


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)
Go to the top of the page
+Quote Post
mike
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Siemion
post
Post #9





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 13.05.2007

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
johny-cage
post
Post #10





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 15.05.2007

Ostrzeżenie: (0%)
-----


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?

Ten post edytował johny-cage 16.05.2007, 07:23:51
Go to the top of the page
+Quote Post
mike
post
Post #11





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/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.
Go to the top of the page
+Quote Post
johny-cage
post
Post #12





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 15.05.2007

Ostrzeżenie: (0%)
-----


Cytat(mike_mech @ 16.05.2007, 10:46:13 ) *
Czytaj z ruchu warg: G Ó W N O P R A W D A (IMG:http://forum.php.pl/style_emoticons/default/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 ...

Ten post edytował johny-cage 16.05.2007, 10:59:52
Go to the top of the page
+Quote Post
jaskooo
post
Post #13





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 24.04.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)


P.S Nawet sciagnalem plik wystawiony przez @mike i skopiowalem jego kod. Efekt taki sam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował jaskooo 17.05.2007, 19:29:15
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.08.2025 - 16:29