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