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

PHP da startuje skriptu ali da ne ceka na njeno izvrsenje?

[es] :: PHP :: PHP da startuje skriptu ali da ne ceka na njeno izvrsenje?

[ Pregleda: 2430 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

zgas

Član broj: 74613
Poruke: 334
*.dialup.neobee.net.

Sajt: odbrojavanje.com


Profil

icon PHP da startuje skriptu ali da ne ceka na njeno izvrsenje?07.10.2009. u 22:28 - pre 176 meseci
Unutar jedne PHP skripte (negde u sredini koda) treba da pozovem drugu skriptu koja ce se konektovati na bazu i izvrsiti neki upis podataka.

Posto skripta koja poziva drugu skriptu za upis podatake mora veoma brzo da se izvrsi, ne bih zeleo da ona ceka na izvrsenje skripte koja upisuje podatke u bazu.
Sledi da "require" nije resenje, jer koriscenjem requirea mora da se ceka na izvrsenje requiredovane skripte.

Da li postoji nacin da se ovo resi - da paranet skripta startuje neku PHP skriptu ali da ne ceka na njeno izvrsenje?
Mozda da iz PHP skripte pozovem skriptu na nacin kao sto CRON poziva neku skriptu na izvrsenje, i da li je to moguce?


Aukcije, www.Odbrojavanje.com
Aukcija može biti osvojena jeftino - za 30 sekundi a 6 dinara!
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: PHP da startuje skriptu ali da ne ceka na njeno izvrsenje?07.10.2009. u 22:46 - pre 176 meseci
Da, jedna mogućnost je da izvršiš php naredbu tako da proces pošalješ u pozadinu:

Code:

if (PHP_OS == 'WINNT' || PHP_OS == 'WIN32') {
    $ppointer = popen('start /b php c:\\...\\spora_skripta.php', 'r');
} else {
    $ppointer = popen('php /.../spora_skripta.php > /dev/null &', 'r');
}
pclose($ppointer);


Druga mogućnost je da preko pošalješ novi HTTP zahtev i preko web servera učitaš skriptu, ali tako da odmah prekineš konekciju i ne čekaš na odgovor servera:

Code:

   $fp = fsockopen($_SERVER['SERVER_NAME'], $_SERVER['SERVER_PORT'], $errno, $errstr, 15);
   $out = "GET ".dirname($_SERVER['SCRIPT_NAME'])."/spora_skripta.php HTTP/1.1\r\n";
   $out.= "Host: ".$_SERVER['SERVER_NAME']."\r\n";
   $out.= "Connection: Close\r\n\r\n";
 
   fwrite($fp, $out);
   fclose($fp);


Treća mogućnost (moj lični favorit ako ti ovo često treba) je da imaš pokrenut neki queue server poput gearman.org i onda samo dodaš zadatak u red za čekanje odakle će ga već nešto pokrenuto iz crona ili što stalno trči na serveru pokupiti i obraditi. Queue server možeš i sam da implementiraš. Prednost je što nemaš čekanje na pokretanje novog procesa ili čekanje na veb server. Mana je što moraš imati veću kontrolu nad okruženjem u kome se sve izvršava.

Jasno ti je da spora_skripta.php neće imati nikakav pristup memoriji (promenljivama, funkcijama,...) iz glavne skripte jer je to potpuno novi proces.
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

zgas

Član broj: 74613
Poruke: 334
*.dialup.neobee.net.

Sajt: odbrojavanje.com


Profil

icon Re: PHP da startuje skriptu ali da ne ceka na njeno izvrsenje?08.10.2009. u 09:04 - pre 176 meseci
Gorane puno hvala na tome sto si mi dao ove tri mogucnosti.

Samo da pomenem za cega planiram ovo da upotrebim i da li mi je bolje da to radim klasicno sa require ili da formiram ovakve procese.

Korisnikov ajax pravi zahteve serveru svake sekunde, i bitno je da obrada tih zahteva bude brza do 0.1 sec sto i jeste (0.001).
E sada svaki 600 ajax zahtev treba da izvrsi i dodatni zahtev sto moze usporiti izvrsenje do 0.1 sec.
Taj dodatni zahtev je, da ucita jednu vrlo malu klasu, da se konektuje na bazu podataka, i da izvrsi jedan jednostavan insert u bazu.
Nisam jos testirao koliko bi dodatnog vremena trebalo za ovo, sto je najgore ne znam koliko ce vremena za ovo trebati ako server bude pod opterecenjem od npr. 100 korisnika istovremenao.

Interesuje me sta savetujete, da li da za pomenuti zadatak kreiram procese koje je gore napisao moderator Goran Rakic ili da zadatak izvrsim na klasican nacin iz skripte koju poziva ajax.

Zeleo bi da Goran da svoj komentar na ovo moje pitanje ako moze.

U nacelu, da li ce upoterba ovih resenja koje postoje i koje je naveo Goran, biti sporija nego direktno izvrsiti ovaj pomenuti zadatak na klasican nacin?
Aukcije, www.Odbrojavanje.com
Aukcija može biti osvojena jeftino - za 30 sekundi a 6 dinara!
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: PHP da startuje skriptu ali da ne ceka na njeno izvrsenje?08.10.2009. u 10:43 - pre 176 meseci
INSERT bi morao da traje kraće nego pokretanje novog procesa, ali najlakše je izmeriti. Smanji količinu koda u omotaču, drži perzistentnu konekciju ka bazi i pošalji direktan upit.

Dodavanje u red za čekanje bi moralo da bude podjednako brzo kao i pisanje u bazu osim ako ti baza nije loše podešena. Problem je što promena neće biti sačuvana dok se stavka iz reda ne preuzme i obradi naknadno pa je ukupno vreme do rezultata u bazi svakako sporije.
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

zgas

Član broj: 74613
Poruke: 334
*.dialup.neobee.net.

Sajt: odbrojavanje.com


Profil

icon Re: PHP da startuje skriptu ali da ne ceka na njeno izvrsenje?08.10.2009. u 12:18 - pre 176 meseci
Perzistentnu konekciju tehnicnki ne mogu uda uradim tako da se moram i konektovati na bazu. Nadam se da to nece biti veliki problem.

Inace posao koji obavljam je u vezi sa pracenjem posecenosti sajta. Upisi u bazu su u vezi sa tim.
Da ne bi korisnicki deo opterecivao ovim, razmisljam da ove inserte radim pomocu CRON-a koji ce periodicno analizirati SESSION fajlove na osnovu kojih ce vrsiti odredjene upise u bazu za korisnike koji su online.

U dilemi sam koje resenje da upotrebim. Predlog bi mi dobro dosao.
Aukcije, www.Odbrojavanje.com
Aukcija može biti osvojena jeftino - za 30 sekundi a 6 dinara!
 
Odgovor na temu

[es] :: PHP :: PHP da startuje skriptu ali da ne ceka na njeno izvrsenje?

[ Pregleda: 2430 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

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