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

fopen() dva puta na isti fajl

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

[ Pregleda: 2538 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Dejan Krstic

Član broj: 479
Poruke: 2558



+1 Profil

icon fopen() dva puta na isti fajl07.06.2004. u 18:54 - pre 218 meseci
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?
 
Odgovor na temu

noviKorisnik
Dejan Katašić
Novi Sad

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

Sajt: www.novikorisnik.net


+5 Profil

icon Re: fopen() dva puta na isti fajl07.06.2004. u 22:22 - pre 218 meseci
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)...
 
Odgovor na temu

Dejan Krstic

Član broj: 479
Poruke: 2558



+1 Profil

icon Re: fopen() dva puta na isti fajl07.06.2004. u 23:06 - pre 218 meseci
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?
 
Odgovor na temu

noviKorisnik
Dejan Katašić
Novi Sad

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

Sajt: www.novikorisnik.net


+5 Profil

icon Re: fopen() dva puta na isti fajl07.06.2004. u 23:28 - pre 218 meseci
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.
 
Odgovor na temu

McKracken
Vladimir Jovanovic
HuxleyDev

Član broj: 465
Poruke: 2941
212.62.59.*

ICQ: 203079925


+7 Profil

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

Za to sluze rbdms-ovi, da ti ne bi razmisljao o takvim detaljima
 
Odgovor na temu

_owl_

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



+3 Profil

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

Dejan Krstic

Član broj: 479
Poruke: 2558



+1 Profil

icon Re: fopen() dva puta na isti fajl08.06.2004. u 11:08 - pre 218 meseci
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 :)
 
Odgovor na temu

noviKorisnik
Dejan Katašić
Novi Sad

Član broj: 13216
Poruke: 4533
194.247.222.*

Sajt: www.novikorisnik.net


+5 Profil

icon Re: fopen() dva puta na isti fajl08.06.2004. u 11:34 - pre 218 meseci
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.
 
Odgovor na temu

Dejan Krstic

Član broj: 479
Poruke: 2558



+1 Profil

icon Re: fopen() dva puta na isti fajl08.06.2004. u 12:17 - pre 218 meseci
AAaaa.... ti si to hteo zbog testiranja. Sorry.... nisam bio ukapirao :)
 
Odgovor na temu

stsung
NS

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



+2 Profil

icon Re: fopen() dva puta na isti fajl12.06.2004. u 10:40 - pre 218 meseci
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.
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: fopen() dva puta na isti fajl14.06.2004. u 21:57 - pre 218 meseci
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.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

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

[ Pregleda: 2538 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

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