Errore irreversibile: superamento del tempo di esecuzione massimo di 30 secondi


397

Sto scaricando un file JSON da una fonte online e e quando scorre attraverso il ciclo, ricevo questo errore:

Errore irreversibile: tempo di esecuzione massimo di 30 secondi superato in C: \ wamp \ www \ temp \ fetch.php sulla riga 24


11
possibile duplicato del tempo di esecuzione massimo superato di 60 secondi che è già un duplicato di altri tre. Si prega di utilizzare la funzione di ricerca prima di chiedere.
Gordon

"La funzione set_time_limit () e la direttiva di configurazione max_execution_time influiscono solo sul tempo di esecuzione dello script stesso. Qualsiasi tempo trascorso su attività che si verificano al di fuori dell'esecuzione dello script come chiamate di sistema tramite system (), operazioni di streaming, query di database, ecc. non è incluso per determinare il tempo massimo di esecuzione dello script. Questo non è vero su Windows "Dalla documentazione di PHP
Jacob Sánchez,

Risposte:


722

Il tuo loop potrebbe essere infinito. In caso contrario, è possibile prolungare il tempo massimo di esecuzione in questo modo:

ini_set('max_execution_time', 300); //300 seconds = 5 minutes

e

set_time_limit(300);

può essere utilizzato per estendere temporaneamente il limite di tempo.


95
set_time_limit (300) può essere utilizzato per estendere temporaneamente il limite di tempo.
Omn,

Questo è impostato solo per quello script o influenzerà tutti gli altri script eseguiti dopo questo sullo stesso server?
Rao,

1
@Rao sì, questo sarà solo per quello script. Per farlo per tutti gli script è necessario modificarlo nel file php.ini. potresti anche fare set_time_limit (0); se vuoi che lo script sia eseguito per sempre o per molto tempo
Haseeb,

31
ini_set ('max_execution_time', 0); // nessun limite
Junaid Atari,

3
@sangam Direi che è la migliore pratica, per mantenere questo limite il più basso possibile pur consentendo una certa quantità di buffer extra. Per motivi di sicurezza, non vorrei spegnerlo completamente. Dovrebbe essere impostato ragionevole. In realtà l'ho impostato sul doppio del tempo impiegato dal mio script più lungo per il completamento in un livello di stress del server medio. Tuttavia potrebbe sempre fallire. Quindi la migliore pratica è anche quella di affrontare separatamente i problemi di timeout per gli script che richiedono tempo.
Hafenkranich,

185

Ho avuto lo stesso problema e risolto modificando il valore per il parametro max_execution_timein php.ini, in questo modo:

max_execution_time = 360      ; Maximum execution time of each script, in seconds (I CHANGED THIS VALUE)
max_input_time = 120          ; Maximum amount of time each script may spend parsing request data
;max_input_nesting_level = 64 ; Maximum input variable nesting level
memory_limit = 128M           ; Maximum amount of memory a script may consume (128MB by default)

Spero che questo possa aiutarti.


1
Per qualche ragione ini_set non funziona ma questo aiuta di sicuro!
gabrjan,

php.inipuò essere trovato in /etc/php5/apache2/php.ini.... Sto usando Ubuntu 13.04 ...
Enissay

Ho avuto lo stesso problema durante l'installazione di Moodle su Wamp ma ho risolto la configurazione del file php.ini
Muhammad Irfan

1
È necessario riavviare apache dopo la modifica di php.ini
spideringweb il

[php7] - sudo nano /etc/php/7.0/apache2/php.ini
Chris Lambrou,

46

Tutte le risposte sopra sono corrette, ma uso un modo semplice per evitarlo in alcuni casi.

Metti questo comando all'inizio del tuo script:

set_time_limit(0);

9
Questo non è affatto raccomandato
io sono la persona più stupida il

1
Il limite di tempo disattivato non protegge da loop infiniti, quindi imposta sempre un limite (maggiore).
bimlas

@IamtheMostStupidPerson Perché no? Se lo usi come localhost
Fernando Torres,

23

Ho riscontrato questo problema durante l'aggiornamento a WordPress 4.0 . Per impostazione predefinita, WordPress limita il tempo massimo di esecuzione a 30 secondi.

Aggiungi il seguente codice al tuo file .htaccess nella directory principale dell'installazione di WordPress per ignorare l'impostazione predefinita.

php_value max_execution_time 300  //where 300 = 300 seconds = 5 minutes

18

Modifica php.ini

Trova questa linea:

max_execution_time

Cambia il suo valore in 300:

max_execution_time = 300

300 indica 5 minuti di tempo di esecuzione per la richiesta http.


16

La tua sceneggiatura sta scadendo. Dai un'occhiata alla funzione set_time_limit () per aumentare il tempo di esecuzione. O profila lo script per renderlo più veloce :)


1
@HarshaMV Intende utilizzare un profilo delle prestazioni per determinare perché lo script è lento all'inizio e ottimizzare il codice per migliorare i tempi di esecuzione. Questo può essere o non essere utile, a seconda di quale sia il collo di bottiglia (CPU vs. I / O del disco vs. Network).
Dan Bechard,

12

se tutto quanto sopra non ha funzionato per te, aggiungi un .htaccessfile alla directory in cui si trova lo script e inseriscilo all'interno

<IfModule mod_php5.c>
php_value post_max_size 200M
php_value upload_max_filesize 200M
php_value memory_limit 300M
php_value max_execution_time 259200
php_value max_input_time 259200
php_value session.gc_maxlifetime 1200
</IfModule>

questo è il modo in cui ho risolto il mio problema, ini_set('max_execution_time', 86400);set_time_limit(86400)risolto il mio problema, ma il metodo .htaccess l'ha fatto.


1
Funziona nel mio caso. Grazie. Sostituisci M con G per GB
Web_Developer

11

Possiamo risolvere questo problema in 3 modi diversi.

1) Utilizzo del file php.ini

2) Utilizzo del file .htaccess

3) Utilizzo del file Wp-config.php (per Wordpress)


8

Puoi rimuovere la restrizione impostandola su zero aggiungendo questa riga nella parte superiore dello script:

<?php ini_set('max_execution_time', 0); ?>

7

Segui il percorso /etc/php5(your php version)/apache2/php.ini.

Aprilo e imposta il valore su max_execution_timequello desiderato.


Su alcuni provider di hosting potresti dover impostare su /home
.php

7

Forse controlla qualsiasi cosa tu abbia cambiato nel file php.ini. Ad esempio, ho modificato "; intl.default_locale =" in "; intl.default_locale = en_utf8" per abilitare l '"Estensione di internazionalizzazione (Intl)" senza aggiungere "extension = php_intl.dll", quindi si è verificato lo stesso errore. Quindi suggerisco di verificare errori simili.



5

Per estendere il max_execution_timetuo puoi usare ini_seto set_time_limit.

// Set maximum execution time to 10 seconds this way
ini_set('max_execution_time', 10);
// or this way
set_time_limit(10);

!! Ma tieni presente che, entrambe le funzioni si riavvia anche il conteggio del tempo di script ha già impiegato per essere eseguito

sleep(2);
ini_set('max_execution_time', 5);

register_shutdown_function(function(){
    var_dump(microtime(true) - $_SERVER['REQUEST_TIME_FLOAT']);
});

for(;;);

//
// var_dump outputs float(7.1981489658356)
//

quindi, se si desidera impostare il tempo esatto massimo per l'esecuzione dello script, il comando deve essere il primo.

Le differenze tra queste due funzioni sono

  • set_time_limit non restituisce informazioni se ha avuto esito positivo ma genererà un avviso in caso di errore.
  • ini_setrestituisce il valore precedente in caso di successo o false in caso di errore senza alcun avviso / errore

5

Puoi farlo facilmente con WHM. Sono appena arrivato a:

WHM -> Configurazione servizio -> Configurazione PHP

Editor-> max_execution_time=30

(30 è il valore predefinito cambiarlo nel valore desiderato)


2

Ho lo stesso problema nel sito WordPress, l'ho aggiunto nel file .htaccess e poi funziona bene per me.

php_value max_execution_time 6000000

0

Ho apportato alcune modifiche nel mio caso in: xampp \ phpMyAdmin \ libraries \ config.default.php

ho cercato: $cfg['ExecTimeLimit'] e modifica il valore a destra ...

Puoi modificare il valore della mano destra su qualsiasi valore più alto, come "5000". e funziona.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.