[ stevs986 @ 04.10.2008. 10:38 ] @
Pozdrav, zanima me kako da nateram neki php script cije izvrsavanje traje malo duze da radi u pozadini...? |
[ stevs986 @ 04.10.2008. 10:38 ] @
[ agvozden @ 04.10.2008. 12:04 ] @
ukoliko je to skripta koja se treba izvrsavati periodicno najbolje je da je pozivas putem cron-a
ukoliko je to dorada nekih detalja na sajtu onda ajax request. Da bi se neka skripta izvrsavala duze onda setujes time_limit [ Miroslav Ćurčić @ 04.10.2008. 14:10 ] @
http://www.php.net/ignore_user_abort
http://www.php.net/function.set-time-limit ili što reče kolega: cron job [ stevs986 @ 04.10.2008. 14:37 ] @
Hvala na odgovrima ali jos uvek mi je malo nejasno. Konkretno sta mene zanima, zeleo bih da obavestim klijenta da je recimo uspesno uploadovao fajl a da ja nastavim da radim nesto sa fajlom sto moze da potraje dugo.
[ centaur @ 04.10.2008. 22:32 ] @
To nece moci, PHP ne podrzava multithreading.
U PHP-u kod se izvrsava liniju po liniju (najprostije receno). Ne mozes da predjes na sledeci zadatak dok se predhodni ne zavrsi. Java recimo to moze.... E sad, koliko znam, mozes malo da prevaris PHP i da koristis multithreading mogucnosti OS-a, ali to nisam radio i ne mogu ti reci nista konkretnije, [ afwt @ 05.10.2008. 05:58 ] @
Naravno da moze. Dovoljno je da:
1. skripta koju hoces da pozoves u pozadini ima ignore_user_abort=true 2. skripta kojom pozivas mora da odradi fsockopen i da "okine" URL sa ukljucenim blockingom i kratkim timeout-om ...i to je to. ovaj ce je okinuti i nastaviti tekuce (prikaz stranice posetiocu?), a ovaj ce da radi u pozadini da bi isporucio zahtev koji ovaj vise ne ceka A uvek mozes da odradis i foru da je pozoves preko IMG taga, tj kao sliku, ali onda coveku stoji "loading" jer browser misli da mu se ucitava slidza... [ centaur @ 05.10.2008. 10:26 ] @
^Sjajno resenje sa fsockopen()!!!
Respect ![]() [ Miroslav Ćurčić @ 05.10.2008. 12:47 ] @
... i obrati pažnju na "cache" header-e, da se ne desi da ti fsockopen dovuče sadržaj iz keša umesto sa servera
[ stevs986 @ 05.10.2008. 13:12 ] @
Hvala na odgvorima... Pozdrav...
[ stevs986 @ 05.10.2008. 14:55 ] @
Pokusavam da pozovem funkciju na sledeci nacin fsockopen("http://localhost/Test/skripta_koju_zelim_u_pozadini.php",80,$errno, $errstr); Ali dobijam sledecu gresku Unable to find the socket transport "http" - did you forget to enable it when you configured PHP?) Nemam iskustva sa ovakvim funkcijama pa me zanima moze li se ona uopste i pozvati ovako...?
[ centaur @ 05.10.2008. 16:31 ] @
[ stevs986 @ 05.10.2008. 17:01 ] @
Pogledao sam link i nisam uspeo da shvatim gde gresim....?
[ Nemanja Avramović @ 05.10.2008. 17:24 ] @
Funkcija fsockopen() ne može da otvori URL tako što ćeš navesti URL koji želiš da otvoriš, već otvara socket konekciju ka nekom domenu/IP adresi, a ti onda njemu šalješ zahtev šta želiš da ti vrati (pogledaj parametre koje prima ta funkcija).
Koristi fopen() ako želiš da otvaraš direktno URL. Naravno, allow_url_fopen mora biti omogućeno na serveru. [ centaur @ 05.10.2008. 17:56 ] @
Citat: stevs986: Pogledao sam link i nisam uspeo da shvatim gde gresim....? Jesi li video da negde pise da adresa pocinje sa http:// ? [ stevs986 @ 05.10.2008. 18:22 ] @
Primetio sam da nema, ali ne znam sta bih drugo trebao da upotrebim i u kom obliku da bi to funkcionisalo i na localhostu i kasnije negde na serveru....
[ agvozden @ 06.10.2008. 14:03 ] @
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|