Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] readfile() - brak uprawnień
yarek12
post
Post #1





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 5.08.2010

Ostrzeżenie: (10%)
X----


Witam,
Mam download plików przez readfile, oto kod pliku php który pobiera pliki:

  1. <?php
  2. $file = $_GET['file'];
  3. header('Content-Type: application/octet-stream');
  4. header('Content-Disposition: attachment; filename="'.$file.'"');
  5. readfile('../files/'.$file.'');
  6. ?>


Owszem plik pobiera się, nazwa się zgadza, tylko zawartość pliku zawsze jest taka:

  1. <br />
  2. <b>Warning</b>: readfile(../files/[136]_[test]_[300x300]_[b28b5c].txt) [<a href='function.readfile'>function.readfile</a>]: failed to open stream: Permission denied in <b>xxxxxxxxxxxxxx/download.php</b> on line <b>5</b><br />
  3.  


Dodam, że na localhost pobieranie działa, pliki są pobierane a ich zawartość jest taka jak powinna być, nie ma żadnych błędów.

failed to open stream: Permission denied in - z błędu wynika że nie ma uprawnień do pobrania pliku, jednak każdy dodawany plik ma chmod 766.

Co więc może być nie tak?

Ten post edytował yarek12 7.07.2011, 19:23:10
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
gcdreak
post
Post #2





Grupa: Zarejestrowani
Postów: 365
Pomógł: 8
Dołączył: 16.12.2008

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


  1. Spróbuj wyświetlić ścieżkę '../files/'.$file.'' i zwerfikuj ręcznie, czy skrypt ma uprawnienia
  2. Sprawdź uprawnienia folderu nadrzędnego dla skryptu
Go to the top of the page
+Quote Post
yarek12
post
Post #3





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 5.08.2010

Ostrzeżenie: (10%)
X----


jestem blady w tematyce po stronie serwera, więc jakbyś mógł jaśniej wytłumaczyć te 2 punkty, byłbym wdzięczny.
Go to the top of the page
+Quote Post
gcdreak
post
Post #4





Grupa: Zarejestrowani
Postów: 365
Pomógł: 8
Dołączył: 16.12.2008

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


Cytat(gcdreak @ 7.07.2011, 21:11:58 ) *
Spróbuj wyświetlić ścieżkę '../files/'.$file.'' i zwerfikuj ręcznie, czy skrypt ma uprawnienia

Daj w skrypcie tylko
  1. echo '../files/'.$file.''; //To co masz w readfile()

Pozostałe linie zakomentuj. Potem, jak już będziesz miał tą wyświetloną ścieżkę do pliku sprawdź w kliencie FTP czy się zgadza i czy masz odpowiednie uprawnienia.

Cytat(gcdreak @ 7.07.2011, 21:11:58 ) *
Sprawdź uprawnienia folderu nadrzędnego dla skryptu

W kliencie FTP sprawdź, czy skrypt ma uprawnienia do katalogu zawierającego pliki.
Go to the top of the page
+Quote Post
by_ikar
post
Post #5





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


Sprawdź co ta funkcja zwróci:

Kod
var_dump(fileperms('../files/[136]_[test]_[300x300]_[b28b5c].txt'));


BTW nie wystarczy że pliki mają uprawnienia, katalog z tymi plikami też musi ci zezwalać na odczyt. Umieszczaj operacje na plikach w warunkach is_readable | is_writable i tym podobne. Dzięki czemu wcześniej będziesz już wiedział w czym jest problem, zamiast doszukiwać się go gdzieś po plikach.

Ten post edytował by_ikar 7.07.2011, 21:51:58
Go to the top of the page
+Quote Post
yarek12
post
Post #6





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 5.08.2010

Ostrzeżenie: (10%)
X----


Na serwerze zwraca int(33534)

Na localhost zwraca int(33206)

Przypominam że na localhost wszystko śmiga jak trzeba
Go to the top of the page
+Quote Post
by_ikar
post
Post #7





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


Aj nie popatrzałem co zwraca funkcja, tylko na pałę ją podałem ;P zrób inaczej, sprawdź tak:

Kod
var_dump(substr(sprintf('%o', fileperms('../files/[136]_[test]_[300x300]_[b28b5c].txt')), -4));
Go to the top of the page
+Quote Post
pyro
post
Post #8





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Pragnę dodać, że w ten sposób można pobierać dowolne pliki z serwera. Zabezpiecz się.
Go to the top of the page
+Quote Post
yarek12
post
Post #9





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 5.08.2010

Ostrzeżenie: (10%)
X----


string(4) "0666" - na local host

string(4) "1376" - na serwerze
Go to the top of the page
+Quote Post
gac3k
post
Post #10





Grupa: Zarejestrowani
Postów: 90
Pomógł: 8
Dołączył: 28.07.2009

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


No ta trójka znaczy mniej więcej tyle że zwykły użytkownik, czyli nie właściciel i nie root nie ma właściwie żadnych praw do operacji na danym pliku, zmień sobie chmod, za pomocą funkcji chmod('0644',$sciezka); o ile tylko serwer daje Ci takie prawa.
Go to the top of the page
+Quote Post
yarek12
post
Post #11





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 5.08.2010

Ostrzeżenie: (10%)
X----


chmod 0664 nic nie zmienił


dalej wyskakuje ten sam błąd co z chmodem 766
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: 23.12.2025 - 08:29