'Maximum execution time of 30 seconds exceeded' betekent dat een PHP-script te lang duurde. Zo verhoog je max_execution_time verantwoord en maak je de taak sneller of opgeknipt.
Met max_execution_time bepaalt PHP hoe lang een script maximaal mag rekenen. Gaat het daaroverheen, dan stopt PHP met Fatal error: Maximum execution time of 30 seconds exceeded. Dat beschermt de server tegen scripts die vastlopen.
Je ziet de fout vaak bij imports, back-ups, updates van grote plugins of het verwerken van veel afbeeldingen. Let op: ook de webserver of proxy heeft eigen tijdslimieten. Als die eerder ingrijpen, krijg je geen PHP-melding maar een 504 Gateway Timeout.
Menunamen kunnen per versie of toestel iets anders heten. Loop de stappen op volgorde af en stop zodra het werkt.
Het bestand en het regelnummer in de foutmelding laten zien waar het script was toen de tijd op was. Dat is niet altijd de oorzaak, maar wel de plek om te beginnen, bijvoorbeeld een externe API-aanroep die blijft wachten.
Voor een eenmalige zware taak mag de limiet omhoog. Stel hem in via het hostingpaneel, php.ini of .user.ini. In code kan het ook, voor alleen dat ene script.
; php.ini of .user.ini
max_execution_time = 120
<?php
// alleen voor dit script, als de hoster het toestaat
set_time_limit(120);Bij nginx met PHP-FPM bepaalt ook fastcgi_read_timeout hoe lang nginx op PHP wacht, en PHP-FPM kent request_terminate_timeout. Staat één daarvan lager dan max_execution_time, dan wint de laagste.
# nginx, in het location-blok voor PHP
fastcgi_read_timeout 120s;Verwerk records in batches (bijvoorbeeld per 200) en laat elke batch een nieuwe aanvraag of een cronjob zijn. Zo blijft elke stap ruim binnen de tijd en kun je bij een fout verdergaan waar je was.
Wacht een script op een andere server, geef die aanroep dan een eigen, korte timeout, zodat één trage dienst niet je hele pagina laat vastlopen.
<?php
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$antwoord = curl_exec($ch);Let op: Vanaf de opdrachtregel (PHP CLI) staat max_execution_time standaard op 0, dus onbeperkt. Zware taken horen daarom vaak in een cronjob of een CLI-opdracht, niet in een webpagina.
Kom je er met deze stappen niet uit, of wil je het liever niet zelf doen? We kijken online mee of komen langs. Hulp op afstand kost €20 per uur; komen we langs, dan is de prijs op aanvraag. Je weet vooraf waar je aan toe bent.
Schrijf kort wat er misgaat en wat je al hebt geprobeerd. Kies of we bellen, online meekijken of langskomen.
Op Linux telt max_execution_time alleen de tijd dat het script zelf rekent; wachten op database, bestanden of netwerk telt niet mee. Daarom kan een pagina veel langer duren dan de limiet zonder deze fout, en grijpt dan vaak de webserver in met een 504.
Niet voor webpagina's. Een vastgelopen script blijft dan een PHP-proces bezet houden. Gebruik een ruime maar eindige waarde, en zet echte langlopers in een cronjob of CLI-script.
Probeer de update opnieuw; vaak lukt het de tweede keer. Blijft het misgaan, update dan plugin voor plugin, of laat de hosting de tijdslimiet tijdelijk verhogen.
Hulp nodig van een mens? Website-onderhoud · WordPress-support · Hosting en onderhoud · Alle oplossingen