Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ukrywanie pliku
Forum PHP.pl > Forum > PHP
lukasz^mar
Napisałem oto taki mały skrypcik (tu uproszczona wersja), który po podaniu metodą get parametrów $plik oraz $kod (w praktyce - specjalny link, np.: www.adres-serwisu.pl/$plik=plik&$kod=kod) - sprawdza ważnośc kodu (w bazie danych) i w zależności od wyniku sprawdzenia przekierowuje na żądany plik - czyli taki prosty, mały system udostępniania plików za pomocą kodów dostępu:

<?php
$db_login = "login";
$db_pass = "haslo";
$download_directory = "./download/";

if(isset($_GET[$plik])and isset($_GET[$kod])){

$plik = strip_tags($_GET[plik]);
$kod = strip_tags($_GET[kod]);

$polaczenie = mysql_pconnect("localhost", $db_login, $db_pass);
$db = mysql_select_db("baza");
///////////////////////////////////////////////////////////////////
/////// Sprawdzam czy jest kod jeszcze nieuzyty ////////
///////////////////////////////////////////////////////////////////
$zapytanie = "SELECT * FROM kody WHERE kod = '$kod' and program = '$plik' and data_uzycia IS NULL";
$wynik = @mysql_query($zapytanie);

// znaleziono jeszcze nieuzywany kod:
if (mysql_num_rows($wynik) > 0)
{
$lokacja = $download_directory.$plik.".zip";
header("Location: $lokacja");
} else{
// Tu obsluga blednego kodu
}// koniec if nieuzyty kod

} // koniec if isset
?>


Skrypt spelnia swoje zadanie - natomiast chodzi mi o to jak zabezpieczyc pliki w katalogu download, by nie byly dostepne bezposrednio, tylko z poziomu skryptu? Chodzi mi o to, by nie mozna bylo do niego dojsc wpisujac po prostu adres w przegladarce: www.adres-serwisu.pl/download/plik.zip
Jedyne co potrafilem zrobic, to wlaczenie Options -Indexes na serwerze, ale co jesli ktos pozna nazwe katalogu?
Czy jest to wogole mozliwe? Probowalem bawic sie prawami dostepu - serwis hostingu poradzil mi by ustawic prawa katalogu CHMOD na 600, ale to nie dziala - skrypt tez sie wywala wtedy.

Bede wdzieczny za podpowiedz
Sabistik
W katalogu z plikami utworz plik .htaccess z:
Kod
deny from all


a za pomoca swojego kodu
  1. <?php
  2. if (mysql_num_rows($wynik) > 0)
  3. {
  4. #$lokacja = $download_directory.$plik.".zip";
  5. #header("Location: $lokacja");
  6.  
  7. #zamiast tego wstawiasz header z odpowiednim typem pliku
  8. #a potem wypluwasz np za pomoca readfile() okreslony plik.
  9. #chyba cos w tym stulu
  10.  
  11.  header('Content-Description: File Transfer');
  12.  header('Content-Type: application/force-download');
  13.  header("Content-Disposition: attachment; filename="".basename("download".$plik)."";");
  14.  
  15.  header('Content-Length: ' . filesize("download".$plik));
  16. readfile("download".$plik);
  17. }
  18. ?>

wrr kaszania sie sleshe i " przez forum ale przyklady masz w manuallu readfile" title="Zobacz w manualu php" target="_manual
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.