Domanda

Ho due domande riguardanti la funzione sleep() in PHP:

  1. Il tempo di sonno influenza il limite di tempo massimo di esecuzione dei miei script PHP? A volte, PHP mostra il messaggio "tempo massimo di esecuzione di 30 secondi superato". Sarà questo messaggio appare se uso sleep(31)?

  2. Ci sono dei rischi quando si utilizza il sleep()function? Quanto costa un sacco di prestazioni della CPU?

È stato utile?

Soluzione

Si dovrebbe provare, basta avere uno script che dorme per oltre il tempo massimo di esecuzione.

<?php
  sleep(ini_get('max_execution_time') + 10);
?>

Spoiler: Sotto Linux, il tempo di sonno viene ignorato, ma sotto Windows, conta come tempo di esecuzione.

Altri suggerimenti

Interessa solo il tempo script non chiamate di sistema come il sonno (). C'è evidentemente un bug in cui il sonno di Windows è incluso (). Max tempo di esecuzione è di circa in tempo reale, non il tempo di CPU o qualcosa di simile. Si può cambiare però:

Per quanto riguarda la differenza tra gli ultimi due, credo max_execution_time è una quantità fissa. Esecuzione:

ini_set('max_execution_time', 60);

limiterà allo script per 60 secondi. Se dopo 20 secondi si chiama:

set_time_limit(60);

lo script sarà ora limitata a 20 + 60 = 80 secondi.

Dalla pagina sonno PHP () , c'è questa nota contributo degli utenti:

  

Nota: Il set_time_limit () funzione   e la direttiva di configurazione   max_execution_time influiscono solo sulla   tempo di esecuzione dello script.   Ogni tempo speso per attività che   succede fuori l'esecuzione del   lo script come ad esempio le chiamate di sistema utilizzando   system (), la funzione sleep (),   database di query, ecc non è incluso   quando si determina il tempo massimo che   lo script è in esecuzione.

Altri hanno già coperto le basi del sonno () e script PHP limite di tempo di esecuzione, ma si dovrebbe anche essere consapevoli di un altro rischio quando si utilizza periodi di sonno veramente lunghi.

Di solito, quando un browser invia una richiesta a un server e non riceve alcun dato dal server, la connessione può il timeout. Questo limite di tempo dipende dalla configurazione del suo navigatore, ma ho letto che IE7 ha un valore predefinito di soli 30 secondi, mentre Firefox ha un valore predefinito di 115 secondi --Potete controllare la propria configurazione in Firefox andando su about: config e il filtraggio per rete .http.keep-alive.timeout (il termine è specificato in secondi).

Edit: ho avuto le unità per network.http.keep-alive.timeout e browser.urlbar.search.timeout confuso. E 'infatti in pochi secondi, non decimi di secondo.

a) Sì, conta verso il limite di tempo (in modo da dormire (31) attiveranno un errore)

b) Si fa il contrario di costare prestazioni della CPU - si consente ad altre applicazioni utilizzano la CPU (quando un'applicazione dorme, l'utilizzo della CPU di tale domanda sarà vicino a 0%). Oltre a prendere tempo lontano da parte dell'utente, non posso davvero pensare di eventuali rischi di utilizzo di questo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top