2010-11-18 10 views
14

Ho pochi dubbi sul tempo massimo di esecuzione impostato in php.ini.Come funziona max_execution_time di PHP?

Supponendo max_execution_time è 3 minuti, considerare i seguenti casi:

  1. Ho un processo che terminerà in 2 minuti.

    Ma è in un ciclo e dovrebbe funzionare 5 volte. Quindi diventa 10 minuti.

    Lo script verrà eseguito correttamente senza mostrare errori per il timeout? Perché?

  2. La funzione PHP stampa solo i dati e richiede solo 2 minuti.

    Ma l'esecuzione della query richiede 5 minuti.

    Lo script verrà eseguito senza errori? Perché?

  3. Il mio singolo processo php richiede 5 minuti.

    Ma sto chiamando lo script dalla riga di comando.

    Funzionerà correttamente? Perché?

  4. Come sono consentiti la memoria e il tempo di esecuzione?

    Se il tempo di esecuzione per uno script è molto alta

    ma restituisce piccola quantità di dati

    Sarà influenzare la memoria o no? Perché?

Voglio imparare cosa sta succedendo internamente, è per questo che sto chiedendo questi. Non voglio aumentare solo il limite di tempo e il limite di memoria.

risposta

31

Le regole su max_execution_time sono relativamente semplici.

  • Il tempo di esecuzione inizia a contare quando il file viene interpretato. Il tempo necessario prima per preparare la richiesta, preparare i file caricati, il server Web che fa le sue cose ecc. Non conta per il tempo di esecuzione.

  • Il tempo di esecuzione è il tempo totale in cui viene eseguito lo script, comprese le query del database, indipendentemente dal fatto che sia in esecuzione in cicli o meno. Quindi nel primo e nel secondo caso, lo script terminerà con un errore di timeout perché questo è il comportamento definito di max_execution_time.

  • Le chiamate di sistema esterne che utilizzano exec() e simili sono non conteggio per il tempo di esecuzione tranne su Windows. (Source) Ciò significa che è possibile eseguire un programma esterno che richiede più tempo di max_execution_time.

  • Quando chiamato dalla riga di comando, max_execution_time viene impostato su 0. (Source) Quindi nel terzo caso, lo script dovrebbe essere eseguito senza errori.

  • Il tempo di esecuzione e l'utilizzo della memoria non hanno nulla a che fare l'uno con l'altro. Uno script può essere eseguito per ore senza raggiungere il limite di memoria. In tal caso, spesso a causa di un ciclo in cui le variabili non vengono disattivate e la memoria precedentemente riservata non viene liberata correttamente.

+1

Questo è parzialmente falso per quanto riguarda le richieste di database, dai miei test personali e [questa risposta] (http://stackoverflow.com/a/10027320/1408100) e [questo commento] (http: // php. net/manuale/fr/function.set-tempo-limit.php # 115057) –

Problemi correlati