[ milos036 @ 18.12.2006. 19:38 ] @
Imam ovakav problem. Naime treba mi skripta koja će mi svaki put generisati link za određini fajl.

Npr. ako se moj fajl nalazi na www.nesto.com/download/nesto.zip kako da napravim da taj fajl nikako ne bude dostupan na toj adresi vec da se svaki put kada neko klikne na download aktivira ovakav link www.nesto.com/download/file.ph...ad=787452435212e18a372453621e8... I da se taj link veze za IP adresu tog korisnika koji skida fajlove i da vazi samo za jednu sesiju znaci samo za jedan klik i da se nikada vise ne moze fajl skinuti sa tog linka.

Razume li neko nesto?
[ miljakovic @ 19.12.2006. 14:46 ] @
Pogledaj na ovoj adresi http://www.b92.net/tehnopolis/internet.php?nav_id=221541 tu ces naci program koji moze da ti pomogne. Naime, meni je trebalo da zabrani pristup sajtu korisnicima koji su iz recimo Engleske. Tu imas naredbe koje preuzimaju IP adresu korisnika. Tu IP adresu upises u tabelu koja ima dva polja: IP i jedno polje koje ima vrednosti 0 ili1. Tako da kad korisnik pristupi promenis polje sa njegovom IP na 1 i u skripti se prvo upitas if(to_polje==0) itd.
Ovo ti je samo jedno pesacko resenje a ti probaj da iskombinujes nesto. Moguce je da posoji i jednostavnije ali vidim da niko ne odgovara na problem tako da probaj to.
Pozdrav.

a cini mi se i da nisam bas najbolje razumeo sta treba da se uradi u linku...
[ brainbuger @ 19.12.2006. 16:23 ] @
Zanimljivo pitanje i mene je nesto slicno zanimalo. Mislim da bi jedno od jednostavnijih resenja bilo da sve fajlove (njihove url-ove) cuvas u jednoj tabeli gde bi svaki fajl imao svoj jedinstveni id. Na ovaj nacin bi tvoja download skripta skrivala pravu putanju:
http://www.nesto.com/download.php?file_id=1034

Pretpostavljam da sve ovo radis iz razloga da zelis da korisnik prodje kroz neke odredjene stranice pre nego sto moze da pokrene download fajla. Neko jednostavno resenje bi bilo da na nekoj nekoj od tih 'prethodnih' stranica setujes $_SESSION promenjivu recimo:
if (!isset($_SESSION['allow_download'])) {$_SESSION['allow_download'] = TRUE;}
a onda je proveris u download.php i dozvaljas download samo ako je TRUE. Nakon toga je vracas nazad na FALSE. Na ovaj nacin, samo korisnik koji dolazi sa odredjene stranice sa tvog sajta ima pravo da dobije fajl. Svako ko pokrene download.php?file_id=1034 nece dobiti nista, to jest, moze biti prosledjen na neku 'prethodnu' stranicu da ispravno dodje do fajla. Ovo bi bilo neko jednostavno resenje, bez pracenja IP adresa, sto znaci, neko malo iskusniji i uporniji bi ipak mogao doci do fajla.
[ milos036 @ 19.12.2006. 18:43 ] @
Ok da kažemo da se tako može odraditi. Ali mene sada interesuje samo jedna stvar. Vidi u PHP Fusion-u je urađeno nešto poput toga što ti pričaš oko download-a. I kada neko klikne na download downlad se pokreće iz sql-a a u sql je definisana tačna adresa npr. http://www.nesto.com/downloads/winrar.exe i kada neko pokrene download onako kako si ti rekao on bi samo link preuzimao iz tabele. A direktan link bi mogao svako da vidi u firefox-u a a ne u nekim moćnijim download manager rešenjima...

Ima li neko još predloga?
[ brainbuger @ 20.12.2006. 10:16 ] @
Naravno da samo cuvanje linkova u tabeli ne bi mnogo pomoglo. Pretpostavljao sam da vec imas neku download skriptu. Saljem ti primer jedne download funkcije, ja sam dodao onaj deo za proveru 'allow_download', ti modifikuj/izbaci sta ti ne bude trebalo. Kreiraj fajl .htaccess u folderu gde cuvas fajlove za download, ima vise nacina da ih zastitis, jedan bi bio da u .htaccess uneses sledece :
<FilesMatch "\.(zip|rar)$">
SetHandler application/x-httpd-php
</FilesMatch>
Ovako ce svi fajlovi u tom folderu koji imaju ekstenziju .zip ili .rar morati biti hendlovani samo od strane php-a, a ti ces se naravno pobrinuti da to bude samo tvoj download skript. Pri pokusaju da se direktno downloaduje fajl, download ce biti neispravan. Ne moze cak ni iz download managera.
[ milos036 @ 20.12.2006. 13:13 ] @
Nista te nisam sada pokontao... Sta ja sada konkretno treba da uradim? Malo se teze snalazim sa PHP-om.
[ aXi_ @ 20.12.2006. 14:26 ] @
@milos036, reci mi samo hoces li skripta da ti radi sa bazom podataka ili bez baze???
[ milos036 @ 20.12.2006. 14:33 ] @
Sa SQL bazom naravno.
[ brainbuger @ 20.12.2006. 14:47 ] @
Odgovorio sam ti na private da ne bi smo razvlacili ovde. Poz
[ dr ZiDoo @ 21.12.2006. 10:31 ] @
Za pocetak fajl: nesto.zip stavis hijerarhijsku jedan folder ispod "www" foldera. E sada code:
Code:

<?php

$file = "../nesto.zip";                                                       // putanja do fajla
$addr_md5 = md5($_SERVER['REMOTE_ADDR']);        //md5 hash ip adrese

$sql = "SELECT COUNT(*) FROM downloads WHERE code = '{$addr_md5}'";        // provjeri da li postoji hash u bazi
$results = mysql_fetch_array(mysql_query($sql));

if($results)                                                                      // ako postoji nista od downloada
{
          print "Vec si skino fajl!";
          die();
}
else                                                                                 // ako ne postoji isporucis mu fajl i upises IP u bazu
{
        $sql = "INSERT INTO downloads ('code') VALUES ('$addr_md5')";                // dodas adresu u bazi
        mysql_query($sql);
        
        $fp = fopen($file, 'r');
        $data = fread($fp, filesize($fp));                           // strpas fajl u varijablu

         $length = strlen($imagedata);
         header('Accept-Ranges: bytes');
         header('Content-Length: '.$length);
         header('Content-Transfer-Encoding: Binary');      // oznacis ga ko binarni da ga slucajno browser ne bi pokuso prikazati
         print($data);                                                         // ouptpu
}

?>


downlods tabela:
Code:

create table downloads (
code verchar(32)
);


Eto mozda ima gresaka u codu posto sam kuco u ovom muljavom boxu ali objasnio sam kak sta pa mozete sam ispravljati. viola.