Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

fopen() dva puta na isti fajl

[es] :: PHP :: fopen() dva puta na isti fajl

[ Pregleda: 835 | Odgovora: 10 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Dejan Krstic
Banca Intesa Beograd

Član broj: 479
Poruke: 2560
195.252.87.*

ICQ: 5785142
Sajt: wap.sanduce.net


Profil

icon fopen() dva puta na isti fajl07.06.2004. u 18:54

Dakle, ajmo malo da se bavimo hipotetikom :)

Sta bi bilo kada bi se dva korisnika pojavila na nekoj stranici u isto vreme a ta stranica pokusava da otvori jedan fajl za pisanje? Drugim recima sta bi bilo kada bi bio pozvan fopen() dva puta u isto vreme da otvori isti fajl za pisanje? U dokumentaciji o tome nisam nasao nista (cak ni na php sajtu gde su komentari korisnika za fu f-ju) a cenim da ce u tom slucaju php vratiti gresku odnosno da nece moci da otvori. E sad, ako se radi o mission critical skripti kako izbeci to i izvesti zapisivanje dva puta bez vracanja greske?
Dejan Krstic
07.06.2004. u 18:54 

noviKorisnik

Član broj: 13216
Poruke: 4513
*.dialup.neobee.net.



Profil

icon Re: fopen() dva puta na isti fajl07.06.2004. u 22:22
Ne mora da bude hipotetika. Lako napraviš testni primer.
Citat:
E sad, ako se radi o mission critical skripti kako izbeci to i izvesti zapisivanje dva puta bez vracanja greske?

Ipak je bolje prvo testirati. Da sad ne lupam ko bi trebao ili ne da detektuje duplo otvaranje fajla - operativni sistem, web server ili php; kao i način upisivanja podataka. Recimo, jedan ekstremni slučaj je da greška nije detektovana uopšte, obe skripte obave svoje pisanje, poslednja pretaba izmene prve - jednom se živi...

Mada mi je logično da se postavi lock na fajl pri prvom otvaranju i tada bi druga skripta trebala da odloži svoj pokušaj za upis za neko vreme (a tako nešto postoji, ako ne ima da izmislimo)...
07.06.2004. u 22:22 

Dejan Krstic
Banca Intesa Beograd

Član broj: 479
Poruke: 2560
*.beotel.net

ICQ: 5785142
Sajt: wap.sanduce.net


Profil

icon Re: fopen() dva puta na isti fajl07.06.2004. u 23:06
Code:
$h = fopen("fajl","w");
fwrite($h, "bla");
fclose($h);


Bez obzira na konfiguraciju racunara vreme za ovo bi trebalo da se meri u milisekundama. E sad, ukoliko se desi da u vreme dok je prva skripta otvorila fajl, druga skripta pokusa da ga otvori i zapise nesto, skoro sam siguran da ce druga vratiti error (nebitno kakav) i da nista od tog otvaranja/upisivanja/zatvaranja nece biti. E sad pitanje je, kako to izbeci?
Dejan Krstic
07.06.2004. u 23:06 

noviKorisnik

Član broj: 13216
Poruke: 4513
*.dialup.neobee.net.



Profil

icon Re: fopen() dva puta na isti fajl07.06.2004. u 23:28
Mislio sam da se ubaci usporivač u primer:
Code:
$h = fopen("fajl","w");
delay(1000);
fwrite($h, "bla");
delay(1000);
fclose($h);

Pošto delay ne postoji može se izmisliti, odnosno treba da radi nešto što parser smatra za pametno određeni broj milisekundi.
Tako bi već bilo moguće da se preklope 2 poziva skripte.
07.06.2004. u 23:28 

McKracken
Vladimir Jovanovic
CEO, FENGOR doo

Član broj: 465
Poruke: 2927
212.62.59.*

ICQ: 203079925
Sajt: www.fglabs.com


Profil

icon Re: fopen() dva puta na isti fajl07.06.2004. u 23:45
To onda nije mission critical skripta kad pise u fajl ...

Za to sluze rbdms-ovi, da ti ne bi razmisljao o takvim detaljima
07.06.2004. u 23:45 

_owl_
Centar - BG

Član broj: 318
Poruke: 989
*.vdial.verat.net

Sajt: home.drenik.net/~owl


Profil

icon Re: fopen() dva puta na isti fajl08.06.2004. u 00:12
Samo da dodam da u PHP-u postoji funkcija flock()
Owl
08.06.2004. u 00:12 

Dejan Krstic
Banca Intesa Beograd

Član broj: 479
Poruke: 2560
*.beotel.net

ICQ: 5785142
Sajt: wap.sanduce.net


Profil

icon Re: fopen() dva puta na isti fajl08.06.2004. u 11:08
Citat:
noviKorisnik:Mislio sam da se ubaci usporivač u primer:
Code:
$h = fopen("fajl","w");
delay(1000);
fwrite($h, "bla");
delay(1000);
fclose($h);

Pošto delay ne postoji može se izmisliti, odnosno treba da radi nešto što parser smatra za pametno određeni broj milisekundi.
Tako bi već bilo moguće da se preklope 2 poziva skripte.


Pa onda ce da drzi fajl jos vise otvoren pa je veca verovatnoca da ce da dodje do greske.

@McKracken

Ja sam lepo napisao da se bavimo hipotetikom :)
Dejan Krstic
08.06.2004. u 11:08 

noviKorisnik

Član broj: 13216
Poruke: 4513
194.247.222.*



Profil

icon Re: fopen() dva puta na isti fajl08.06.2004. u 11:34
Citat:
Pa onda ce da drzi fajl jos vise otvoren pa je veca verovatnoca da ce da dodje do greske.

Naravno, to je i cilj - da postaviš stvari tako da je moguće da se to desi - dakle da ne bude samo hipotetika. Ovakvu postavku možeš i sam da simuliraš i da se realno desi da imaš simultano otvaranje fajla s više strana.

Šta kada se to desi? Sudeći po napomeni o flock, moguće je da ne dobiješ nikakvu poruku o grešci. Naravno, ako se ulovi greška, imaš: Warning o tome, $h ti je false pa dobijaš još grešaka pri fwrite i fclose.
08.06.2004. u 11:34 

Dejan Krstic
Banca Intesa Beograd

Član broj: 479
Poruke: 2560
*.beotel.net

ICQ: 5785142
Sajt: wap.sanduce.net


Profil

icon Re: fopen() dva puta na isti fajl08.06.2004. u 12:17
AAaaa.... ti si to hteo zbog testiranja. Sorry.... nisam bio ukapirao :)
Dejan Krstic
08.06.2004. u 12:17 

stsung
NS

Član broj: 12899
Poruke: 378
*.panline.net



Profil

icon Re: fopen() dva puta na isti fajl12.06.2004. u 10:40
Citat:
Pošto delay ne postoji može se izmisliti


Postoji funkcija sleep().

U svakom sluchaju, za ovakve situacije najkbolje je koristiti bazu.
No, ako pretpostavimo da je rad sa fajlovima u pitanju, a fajl je prva skripta zakljuchala, ondak bi neka procedura bila, pokushavati svake recimo 2 sekunde da fajl takodje zakljuchamo/otvorimo dok je li tako to ne uspemo. (prim. aut. Uzhasno reshenje ) Nisam siguran u svakom sluchaju shta bi se desilo ... jel neko probao ?

Svako dobro.
12.06.2004. u 10:40 

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 2383
*.vdial.verat.net

Jabber: grakic@jabber.org
Sajt: blog.goranrakic.com


Profil

icon Re: fopen() dva puta na isti fajl14.06.2004. u 21:57
upise radiš u nezavisne datoteke, a druga skripta to sklapa u jednu. Sada sve zavisi da li samo radiš upis ili i čitaš i koji su podaci itd...
http://sr.openoffice.org — slobodan kancelarijski paket, zamena za MS Office, na srpskom i engleskom, legalno bez troškova licenciranja
14.06.2004. u 21:57 

[es] :: PHP :: fopen() dva puta na isti fajl

[ Pregleda: 835 | Odgovora: 10 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.