Come appare il messaggio
PHP Fatal error: Maximum execution time of 30 seconds exceeded in /var/www/html/wp-admin/includes/class-wp-upgrader.php on line 214Cause frequenti
- Una query lenta, un'API esterna lenta oppure un'importazione o esportazione grande.
- Il compito è semplicemente più grande del limite predefinito: aggiornamenti, backup, lotti di immagini.
- Un ciclo infinito o un'attesa di qualcosa che non arriva.
- Il limite è stato alzato per PHP ma nginx o un proxy interrompe prima (allora vedi 504).
- La riga di comando non ha limite (predefinito 0), quindi il problema compare solo nel browser.
Verifica
- Quale limite usa PHP-FPM?
grep -rn 'max_execution_time' /etc/php/*/fpm/ - Controlla il valore attivo dal punto di vista del web server
php-fpm8.3 -i | grep -i max_execution_time - Il timeout del web server è più corto?
nginx -T 2>/dev/null | grep -E 'fastcgi_read_timeout|proxy_read_timeout'
Soluzione
- Trova la parte lenta (query, chiamata API) e velocizzala. È la vera soluzione.
- Alza il limite dove serve:
max_execution_time = 120nelphp.inidi FPM, oppurephp_admin_value[max_execution_time] = 120nel pool, poi ricarica PHP-FPM. - Alza di conseguenza
fastcgi_read_timeoutin nginx, altrimenti gli utenti ricevono prima un 504. - Esegui i compiti lunghi come cron job, worker di coda o comando CLI invece che in una richiesta web.
- Nel tuo codice chiama
set_time_limit()solo per lo script che ne ha bisogno.
Domande frequenti
Perché ricevo ancora un 504 dopo aver alzato max_execution_time?
nginx ha un limite proprio, di default 60 secondi. Vedi upstream timed out (110).
Un limite molto alto è sicuro?
Un limite lungo lascia che una richiesta bloccata occupi a lungo un worker. Tienilo basso quanto consente il compito reale.