$v) { $key[] = $k; } return $key; } //funzioni per eseguire un processo lungo da eseguire senza timeout //start_confirm_timeout = N (secondi) //Controlla e aspetta la conferma che il job parte entro N secondi viene impostato nello stato function indi_job_start_bg($pagina=NULL,$key=NULL,$start_confirm=TRUE,$start_confirm_timeout=5) { //if(!$key) $key = md5($GLOBALS['CONF']['sito']."-".$pagina); $time = 0; $c = 0; if($pagina != NULL) { //start con conferma if($start_confirm and $start_confirm_timeout) { //pare in modalita start confirm $ret = indi_job_start($pagina,$key,"start_confirm"); } else { //start senza conferma $ret = indi_job_start($pagina,$key); } if($ret) { //faccio partire il lavoro $URL = parse_url($pagina); $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if($socket) { //socket_set_nonblock($socket); socket_connect($socket, $URL['host'], 80); socket_set_nonblock($socket); $output .= 'GET '.$URL['path'].(isset($URL['query']) ? '?'.$URL['query']."&job=$key&job_uid=".indi_job_get_var("uid",$key) : '?job=$key&job_uid=".indi_job_get_var(')." HTTP/1.1\r\n"; $output .= 'Host: '.$URL['host']."\r\n";; $output .= 'Connection: Close'."\r\n\r\n"; $write = socket_write($socket, $output, strlen($output) ); socket_set_block($socket); //$data = socket_read($socket, 4096) ; socket_close($socket); if($write) { if($start_confirm and $start_confirm_timeout) { //da rivedere non è preciso perche' il controllo rallenta il ciclo while($time < $start_confirm_timeout and $c < $start_confirm_timeout/0.2) { $c++; usleep(1000000/5); //due decimi di secondo $time = $time+0.2; // indi_job_log("$time ".$start_confirm_timeout/0.2); //controllo quando va in running indi_job_log("Bg. Confirm attempt N. $c - ".time()); if(indi_job_get_var("status",$key) == "running") { indi_job_log("Bg. Confirmed"); return TRUE; } } indi_job_error("Timeout attesa di conferma",$key,"confirm_timeout"); return FALSE; } else { return TRUE; } } else { indi_job_finish("Errore 'socket_write'url($pagina)",$key); //indi_job_log("Errore apertura socket url: '$paagina'",$key); return FALSE; } } else { indi_job_finish("Errore 'socket_connect' url($pagina)",$key); return FALSE; } } else { //l' errore è gestito da indi_job_start } } else { indi_job_log("Errore, url non presente!",$key); } return $ret; } ?>