[ mist @ 04.04.2006. 20:46 ] @
Problem je sledeci:

Napravio sam skriptu za upload fajlova, sajt je tipa imageshack. Samo sto ovde ima i video klipova i flasheva i mp3-a.

Radi na sledeci nacin:
1. Korisnik uploaduje fajl
2. Sistem generise random alfanumericki string duzine 15 znakova pomocu neke formule koju sam iskopao na netu.
3. fajl se snimi na server pod imenom tog generisanog stringa.
4. upise se u bazu gde je jedno od polja taj "jedinstveni" string.


Kada korisnik zeli da vidi fajl on treba da poseti link www.imesajta.com/view?file=<jedinstveni_string>

Medjutim, desava se da prilikom generisanja novog stringa sistem izgenerise string koji vec postoji. Naravno kada korisnik proba da poseti gore navedeni url sistem izvadi ranije uploadovani fajl sa istim jedinstvenim stringom.

Na sajtu trenutno ima oko 25 hiljada fajlova. Ali ljudi, random string duzine 15 karaktera, pa verujem da je verovatnoca da se ponovi daleko manja od 1:25.000.

Ovo je pocelo da se desava kada je bilo samo 1.000 fajlova na sistemu. Prvo sam probao da kada generisem novi random string prvo proverim da li isti postoji u bazi, pa ako postoji probam ponovo i tako ukrug, ali izgleda da je to zaglupljivalo sistem kada je broj fajlova porastao na 10.000, pa sam odustao od toga.
E onda sam poceo da ispred ovog stringa dodajem unix microtime string i evo opet je pocelo da se desava, posle dva meseca.

Moj jedini zakljucak je da postoji memory leak.
Za pristup bazi koristim PEAR:DB bez permanentne konekcije.

Ima li neko ideju, pomagajteeee!!!!!
[ Nemanja Avramović @ 04.04.2006. 21:45 ] @
Mozda je najbolje da odradis md5 fajla i da tako nazoves taj jedinstveni URL. Onda, ako neko uploaduje isti fajl, ne moras da uploadujes ponovo, samo mu bacis link od vec postojeceg fajla (tako slicno radi rapidshare).

Samo mala napomena: Sto se tice mp3 fajlova, pazi da ne dozvoljavas da ljudi povredjuju autorska prava (kace "komercijalne" pesme) ili barem napravi neki sistem da moze npr. autor pesme da te sa par klikova obavesti da je to njegova pesma i da treba da je skines ili u suprotnom...
[ mist @ 04.04.2006. 22:06 ] @
Vidis, to i nije losa ideja.

Ne razumem se u md5 hash, ali da li je sigurno da ce svaka dva razlicita fajla imati razlicite md5 hasheve?

Sto se tice mp3 sadrzaja, to je problem vlasnika sajta. Ja sam samo mali php rudar crnac. :)


[ SmilieBG @ 04.04.2006. 22:31 ] @
ili da kombinujes stvari, tipa IP adresu tog ko stavlja fajl (ne verujem da ce ista osoba isti fajl 2 x da stavlja) + md5 + random string...

Inace, to sto navodis, nije momery leak, mem leak je nesto sasvim drugo :)

Poz,
Sale
[ gost123 @ 06.04.2006. 12:09 ] @
$id = $filename.sha1(mt_rand(1, 1000).time());

ili

$id = $filename.md5(mt_rand(1, 1000).time());

sha1 vs. md5

sha1 : 40-character hexadecimal number
md5: 32-character hexadecimal number

sha1: PHP 4 >= 4.3.0, PHP 5
md5: PHP 3, PHP 4 , PHP 5


mozda je ovo i previse ali za svaki slucaj :)

Citat:
mist: Ne razumem se u md5 hash, ali da li je sigurno da ce svaka dva razlicita fajla imati razlicite md5 hasheve?


o sha1 algoritmu mozes procitati nesto vise na ovoj adresi:
http://www.faqs.org/rfcs/rfc3174