Questa non è una delle normali domande se il sonno viene conteggiato per un timeout o cose del genere. Ok, ecco il problema: ho impostato max_execution_time per PHP come 15 secondi e idealmente questo dovrebbe scadere quando supera il limite impostato, ma non è così. Apache è stato riavviato dopo la modifica al file php.ini e un ini_get ('max_execution_time') va tutto bene. A volte lo script può durare fino a 200 secondi, il che è pazzesco. Non ho alcuna comunicazione di database. Tutto lo script cerca i file sul filesystem unix e in alcuni casi reindirizza a un'altra pagina JSP. Non c'è sleep() sulla sceneggiatura.PHP max_execution_time non è scaduto
ho calcolare il tempo totale di esecuzione dello script PHP in questo modo:
All'inizio dello script ho impostato:
$_mtime = microtime();
$_mtime = explode(" ",$_mtime);
$_mtime = $_mtime[1] + $_mtime[0];
$_gStartTime = $_mtime;
e l'ora di fine ($ _ gEndTime) è calcolato in modo simile.
Il tempo totale viene calcolato in una funzione di spegnimento che ho registrato:
register_shutdown_function('shutdown');
.............
function shutdown()
{
..............
..............
$_total_time = $_gEndTime - $_gStartTime;
..............
switch (connection_status())
{
case CONNECTION_NORMAL:
....
break;
....
case CONNECTION_TIMEOUT:
....
break;
......
}
}
Nota: Non posso usare $ _SERVER [ 'REQUEST_TIME'] perché la mia versione di PHP non è compatibile. Questo fa schifo - lo so.
1) Bene, la mia prima domanda ovviamente è: perché il mio script PHP viene eseguito anche dopo il limite di timeout impostato?
2) Apache ha la direttiva Timeout che è 300 secondi ma il file binario di PHP non legge la configurazione di Apache e questo non dovrebbe essere un problema.
3) C'è la possibilità che qualcosa stia inviando PHP in una modalità di sospensione?
4) Sto calcolando il tempo di esecuzione in modo errato? C'è un modo migliore per farlo?
Sono perplesso a questo punto. Wizards PHP: per favore aiuto.
Modifica: Ho appena scoperto che le operazioni di flusso non sono la causa con alcuni registri. Il ritardo è solo casuale all'interno dello script anche quando non sono eseguite operazioni di streaming. Il cambio di contesto potrebbe essere la ragione. Ma non ho ancora una risposta chiara. Ho cercato Real max_execution_time for PHP on linux ma non sono sicuro di volerlo provare. Qualche altro suggerimento?
Credo che le operazioni del file system non vengano conteggiate nei calcoli del limite di tempo. – lonesomeday
Sai, puoi usare 'microtime (true)' per ottenere subito un 'float' indietro ... – deceze
@lonesomeday: ne sei sicuro? –