[ seymour @ 06.11.2007. 01:47 ] @
| Ovo nekom moze zvucati glupo ,ali ja stvarno ne znam kako apache funkcionise. Da li apache server dozvoljava da se u isto vreme izvrsava ista skripta za dva razlicita poziva? Ako dozvoljava, kako u PHP staviti lokovanje (u ovom slucaju cele skripte) po ulasku u skriptu, odnosno otkljucavanje po izlasku, a sve to u cilju da se ne dozvoli istovremeni pristup toj istoj skripti? |
[ 3emyh @ 06.11.2007. 02:02 ] @
Dozvoljava tako sto startuje poseban proces za svaku konekciu (korisnika) (al sam lupio :)
Cemu lock skripte (i sta je to?). Za rad sa vise korisnika (pamti varijable jednog korisnika i sl.) koristi session-e
[ vilyu @ 06.11.2007. 07:55 ] @
Internet je okrenut ka jednovremenom usluzivanju vise korisnika. Kako bi recimo ES radio da moze samo jednog korisnika da opsluzi u vremenu. Koristi bazu podataka, ona ce ti obezbediti ocuvanje sadrzaja pri istovremenim zahtevima za upis/citanje.
[ seymour @ 06.11.2007. 08:05 ] @
Ma ok je to sve, ali citav postupak u jednoj skripti bi se terminologijom baza podataka mogao opisati kao jedna transakcija (operacije nad file systemom servera koje ne smeju da budu poremecene). Kako to da postignem? Da se radi u javi koristio bih synchronized metodu, u c# bih koristio lock ili Mutex, ali kako to uraditi u php-u?
[ dakipro @ 06.11.2007. 08:53 ] @
Mislim da je najveca razlika u tome sto je php skriptni jezik za razliku od ostalih koje si nabrojao, sto znaci da se skripta izvrsi u jednom prolazu i to je to, to je jedna "transakcija", skripta je pocela, zavrsila i kraj, proces je gotov, nema lockovanja nicega (osim bese nekih db servera koji ovo automatski regulisu, ali sto se php-a tice, tu je kraj). Sad malo pricam i napamet, ali npr. mysql jedno konektovanje iz php-a, jedan proces u mysql-u (ili nesto nalik ovome) i to je to. Sad bas ne znam kako to zaista radi, ali znam da ne mozes poremetiti rad jednog procesa konekcije i rada nad bazom nekim drugim procesom (u ovom slucaju nekim drugim korisnikom). Sve to mysql regulise automatski.
[ seymour @ 06.11.2007. 14:36 ] @
Evo, ovo je konkretan problem:
Radim upload slika pomocu zip fajla. Sve slike se cuvaju u jednom direktorijumu. Na pocetku ekstraktujem slike iz zipa i snimam ih sa originalnim imenima u dati folder, a zatim svaku ponaosob preimenujem da odgovara odredjenoj semi koja daje unikatne nazive fajlova. Sta je problem?
Pretpostavimo da oba korisnika koje spominjem uploaduju zipove sa razlicitim slikama, ali da se neka imena tih slika poklapaju. Korisnik uploaduje zip, cime skripta pocne da se izvrsava i negde u polovini posla drugi korisnik takodje zazeli da uploaduje.
Svi image fajlovi prvog korisnika nisu stigli da se preimenuju, a drugi korisnik je uplodovao i izvrsena je ekstrakcija arhive, te su neki fajlovi prvog korisnika, koji nisu stigli da se preimenuju, pregazeni fajlovima drugog.
Da se to ne bi desavalo, treba da obezbedim da je cela skripta transakcija (ne u smislu da se rollbackuje u slucaju greske, nego u smislu da se ne mogu paralelno izvrsavati dve iste transakcije koje narusavaju konzistentnost jedna drugoj) . E sada, ako apache ne moze ISTU skriptu da izvrsava dva puta u ISTO vreme, onda nema nikakvih problema :)
I ne zelim odgovor neka svako uploaduje u poseban (svoj) direktorijum ili slicno.
[ dakipro @ 06.11.2007. 14:54 ] @
Kako mislis da apache ne moze istu skriptu da izvrsi u isto vreme?
Naravno da moze, to je i poenta, kako mislis da rade sajtovi sa xx.000+ poseta dnevno? to je puno u sekundi, a pogotovo ako je upload slika u pitanju, pa je skripta zauzeta i malo vise. Definitivno ces u ovom slucaju imati problem brisanja tudjih fajlova ako ih snimas u originalnom nazivu pa ih posle renamujes (iako ne znam sto bi to radio ovako, mogo bi mozda odma da ih snimis pod novim imenom) i definitivno ces dobiti odgovor "nesto slicno" sto mislim da je jedini moguci nacin, makar dodaj ispred imena id korisnika, pa posle ako ti treba mozes da ga uklonis lako. I najsigurnije naravno, svaki korisnik folder sa svojim id-jem ako je neophodno, pa nakon obrade ciscenje 
[ stsung @ 06.11.2007. 15:07 ] @
Pozd.
Nachin na koji razmishljash nikako nije dobar. Prvo, korishcenje lock fajlova nije uopshte problem. Medjutim, kao shto reche dakipro, sa malo uchestalijim korishcenjem te funkcije sajta skripta ce biti zauzeta predugo jer zhelish da dozvolish da samo jedan korisnik to radi u jednom trenutku. I shta da uradish sa tim drugim korisnikom u tom sluchaju? Da li cesh da se vrtish u skripti odredjeno vreme stalno proveravajuci lock chekajuci da neka prethodna skripta zavrshi ? To ne valja - ako bude predugo korisnik mozhe da pomisli da mu je pukla konekcija ili tako neshto pa proba ponovo. Vraticesh greshku? Ovo takodje ne valja - tvoja skripta ce se okinuti tek nakon kompletiranog uploada. Znachi ceo fajl je vec uploadovan ... i shta sad - ako 10 korisnika pokushava paralelno ovih 9 shto je uploadovalo ko zna koliki fajl mora ponovo da uploaduje dok se ne poklopi da niko to ne radi u tom trenutku??
Ne znam kako vrshish unzip - ako ima mogucnosti odmah preimenuj u to shto hocesh. Ako nema te mogucnosti koristi ili korisnichke direktorijume ili direktorijume sa unique imenom (koji uklonish nakon zavrshetka operacije). Nemoj da odmah odbacujesh takvo reshenje - celu stvar si u stvari stostruko vishe zakomplikovao nego shto treba.
Svako dobro.
[ seymour @ 06.11.2007. 15:10 ] @
Pa moram ih snimati pod originalnim imenom jer tako radi PClZip ili kako se klasa zove.
Ipak, odlucio sam se jedinstvene foldere. Hvala puno na pomoci.
[ seymour @ 06.11.2007. 17:23 ] @
Resio sam problem uvodjenjem jedinstvenog direktorijuma za svaku galeriju. Inace lockovanje u mom slucaju ne bi bio problem, jer bi pristup doticnoj skripti, odnosno funkciji uploada slika imala samo odredjena lica (ne obicni korisnici, maximalno 6 osoba), koja bi taj upload vrsila eventualno jednom nedeljno.
Ipak mislim da se u nekim stvarima mora osigurati lockovanje, mada, svakako da se vecina zahteva kod web sajtova odnosi na razne selekte i jednostavne inserte/update/delete kod kojih bi lockovanje bio tezak penal za performanse. A opet, kod ozbiljnih aplikacija sigurno se ne bi koristio MyISA(krsh) engine koji sam ja primoran da koristim.
[ Schmidt @ 20.11.2007. 23:10 ] @
jedinstveno ime za svaku galeriju ti mozhe predstavljati problemkasnije.
Moj prijedlog bi bio:
prihvatish zip file, kreirash unique temp dir u /tmp, otpakujesh fajlove, preimenujesh ih, odradish shta sve imash i obrishesh unique temp dir.
[ seymour @ 21.11.2007. 17:35 ] @
tako je i uradjeno. ali svakako hvala :)
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|