2011-08-08 11 views
13

Powiedzmy, że mam plik tekstowy example.txt i mam skrypt PHP na moim serwerze WWW readfile.php.Zezwalaj skryptom na odczytanie pliku, ale uniemożliwić użytkownikom bezpośrednie oglądanie pliku.

Co chcę być w stanie zrobić to, aby uniemożliwić użytkownikom wpisywanie http://www.example.com/example.txt i patrząc w pliku tekstowym bezpośrednio, ale nadal chcemy, aby ludzie mogli załadować http://www.example.com/readfile.php który wczytuje z pliku example.txt i robi coś z nim (ewentualnie wyświetla zawartość pliku).

Ponadto, jeśli można to zrobić, jaki jest najlepszy sposób na zrobienie tego?

+0

http://httpd.apache.org/docs/current/mod/mod_rewrite.html –

+0

Masz na myśli "... chcesz, aby ludzie mogli załadować http://www.example.com/readfile.php" nie "readfile.txt". –

Odpowiedz

14

Tak, to jest łatwe do zrobienia.

Istnieją dwa główne sposoby, aby uniemożliwić użytkownikom dostęp do example.txt. Pierwszym z nich jest umieszczenie go w folderze poza folderem sieciowym (zwykle o nazwie www lub public_html), drugim jest umieszczenie pliku .htaccess w folderze za pomocą skryptu example.txt, który blokuje dostęp do pliku w całości. .htaccess wyglądałby

<files "example.txt"> 
deny from all 
</files> 

ale można zmienić example.txt coś jak *.txt jeśli chce zablokować wszystkie .txt pliki w folderze.

Następnie można użyć file_get_contents() w readfile.php aby uzyskać zawartość pliku tekstowego, lub jeśli po prostu chcesz odtwarzać plik można użyć readfile

+0

+1 za umieszczenie pliku w katalogu internetowym i użycie .htaccess. Dzięki. – mtahmed

+0

@mtahmed Nie ma za co. Dziękujemy za przyjęcie! – Paulpro

+0

Dodałem plik .htaccess, ale pojawia się błąd podczas próby wywołania file_get_contents() :: nie udało się otworzyć strumienia: żądanie HTTP nie powiodło się! HTTP/1.1 403 Zabronione. Czy muszę zmienić uprawnienia do php, aby uzyskać dostęp do pliku? Próbowałem również używać cUrl bez powodzenia. –

8

Po prostu przechowuj pliki, których nie chcesz publicznie dostępne, pod adresem poza katalogiem WWW.

/home 
    example.txt 
    /www 
     readfile.php 

Jeśli /home/www/ jest folder Webroot publicznej, każdy plik powyżej nie jest dostępny za pośrednictwem serwera WWW. readfile.php może jednak uzyskać dostęp do pliku idealnie w porządku pod adresem ../example.txt.

+0

WOW ... dlaczego o tym nie pomyślałem? Dzięki! – mtahmed

0

Możesz umieścić plik „example.txt” na zewnątrz folderu publicznego i odczytać z readfile.php jak $content = file_get_contents("../example.txt");

1

Jeśli trzeba przechowywać pliki w webroot, a następnie umieścić pliki w folderze i odmówić dostępu do tego folderu. Jeśli używasz apache, stworzyć plik .htaccess w folderze i rodzaju w deny from all

0

można nazwać plik tak i ludzie nie widzą Nazwa pliku:

<?php 
$file = 'example.txt'; 

if (file_exists($file)) { 
    header('Content-Description: File Transfer'); 
    header('Content-Type: application/octet-stream'); 
    header('Content-Disposition: attachment; filename='.basename($file)); 
    header('Content-Transfer-Encoding: binary'); 
    header('Expires: 0'); 
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
    header('Pragma: public'); 
    header('Content-Length: ' . filesize($file)); 
    ob_clean(); 
    flush(); 
    readfile($file); 
    exit; 
} 
?> 

(źródło: php .net)

Czy ta praca dla Ciebie?

1

robiłem coś podobnego, gdzie pliki zawierają niezwykle wrażliwy informacje i chcę, aby zweryfikowani użytkownicy mogli pobrać plik przez połączenie HTTPS.

Co zrobiłem było tak:

umieścić pliki w ścieżce katalogu, który jest poza zakresem tego, co serwer WWW (Apache, dla mnie) widzę. W związku z tym nie ma możliwych adresów URL, które spowodują, że plik zostanie udostępniony bezpośrednio przez serwer sieciowy.Następnie utworzyłem skrypt, który umożliwia użytkownikom logowanie, kliknięcie na plik, który chce, a następnie skrypt PHP odczytuje plik, umieszcza odpowiednie nagłówki, a następnie przesyła plik do komputera użytkownika.

Oczywiście skrypt, który pokazuje użytkownikowi listę plików i skrypt przesyłający plik do użytkownika, musi mieć co najmniej prawo odczytu plików znajdujących się w ścieżce, w której są przechowywane.

Powodzenia !!