NeuBlack Friday – 50 % Rabatt auf die erste Zahlung
WordPress-Fehlerbehebung

Maximale Ausführungsdauer überschritten

PHP stoppte ein Skript, das länger lief als es erlaubt war. Das Limit hat seinen Job gemacht; die Frage ist, ob der Job in eine Web-Anfrage gehörte.

Fatal error: Maximum execution time of 30 seconds exceeded

Kurzantwort

Eine Seite, die mehr als dreißig Sekunden benötigt, hat ein Problem zu beheben; ein Import, der zehn Minuten benötigt, muss irgendwo laufen, ein Timeout gilt nicht.

Diagnose

Die wahrscheinlichsten Ursachen zuerst.

Gehen Sie die Liste der Reihe nach durch. Prüfen Sie jede Ursache, bevor Sie etwas ändern, da die Lösungen unterschiedlich sind und eine Vermutung mehr Zeit kostet als ein Befehl.

UrsacheSo prüfen Sie esLösung
Ein Bulk Job läuft im BrowserDer Fehler folgt einer Aktion, die Sie in wp-admin gestartet haben, und stoppt bei jedem Versuch zur gleichen Zeit.Führen Sie es von WP-CLI aus, wo das Limit nicht gilt, oder in Blöcken, die den Fortschritt aufzeichnen und wieder aufnehmen.
Ein Update oder eine Installation über einen langsamen LinkDer Fehler passiert beim Herunterladen und nicht während der Verarbeitung, und größere Pakete scheitern, während kleine erfolgreich sind.Heben Sie die Begrenzung für den Admin-Kontext an oder installieren Sie sie aus dem Dateisystem anstelle von HTTP.
Ein langsamer Outbound-Call innerhalb einer SeiteEine gewöhnliche Front-End-URL ist betroffen und die Website hängt von einem Drittanbieter-Service ab, der einen schlechten Tag hat.Bound die ausgehende Anfrage mit einem eigenen Timeout und Cache das Ergebnis, anstatt die Skript-Limit um sie herum zu erhöhen.
Das Limit gilt, wenn Sie es nicht erwartet habenDer Wert unterscheidet sich zwischen der CLI, der Webanforderung und cron - jeder Kontext kann einen anderen tragen.Ändern Sie es dort, wo der Job tatsächlich läuft. Ein erhöhtes Weblimit tut nichts für einen Job, der unter cron ausgeführt wird.
Eine unendliche SchleifeDie Zeit wird ohne Netzwerk- und Datenbankaktivität verbracht, und der gleiche Codepfad wiederholt sich in einem Profiler.Wenn man das Limit hier anhebt, bedeutet das nur, dass die Seite länger stecken bleibt, bevor sie aufgibt.
Anleitung

Schritt für Schritt zur Lösung.

Die Befehle setzen WP-CLI und Shell-Zugriff voraus. Jeder Schritt erklärt, was er tut, damit Sie ihn bei Bedarf im Dashboard oder per SFTP ausführen können.

  1. Finden Sie heraus, welche Grenze gilt, wo

    Die Kommandozeile und die Webanforderung teilen sich normalerweise keinen Wert.

    php -i | grep max_execution_time
    php -r 'echo ini_get("max_execution_time"), PHP_EOL;'
  2. Verlegen Sie den Job dorthin, wo das Limit nicht gilt

    WP-CLI läuft ohne Wanduhr darüber, weshalb lange Jobs dort hingehören.

    wp plugin install some-plugin --activate
  3. Wenn es in einer Anforderung ausgeführt werden muss, heben Sie es nur für diesen Pfad an

    Scoped auf den admin-kontext und nicht auf alles, was die website dient.

    wp config set WP_MEMORY_LIMIT '256M'
  4. Überprüfen Sie, ob die Zeit Outbound geht

    Wenn das Skript auf dem Server eines anderen wartet, ist das Limit nicht das, was geändert werden muss.

    wp eval 'var_dump( wp_remote_get( "https://example.com", [ "timeout" => 5 ] ) );'
  5. Bestätigen Sie, dass es jetzt fertig ist

    Führen Sie den gleichen Job erneut aus und sehen Sie ihn vollständig an, anstatt davon auszugehen, dass er es tut.

    time wp cron event run --due-now
Mit MagicWP

Darum kümmert sich die Plattform.

Ausführungslimits werden für den Admin- und Cron-Kontext erhöht und dort gelassen, wo sie für Web-Anfragen gehören, so dass ein Import Raum zum Abschluss hat, ohne auch eine öffentliche Seite für Minuten laufen zu lassen. WP-CLI ist auf jedem Plan für die Jobs verfügbar, die niemals in einem Browser-Tab hätten sein sollen, und geplante Arbeit läuft auf einem echten Scheduler statt in jemandes Seitenlast.

Häufige Fragen

Häufige Fragen.

Warum ist das Limit 30 Sekunden?
Es ist PHPs Standard für Web-Anfragen, und für eine Web-Anfrage ist es großzügig. Kein Besucher wartet dreißig Sekunden. Das Limit ist nur dann ein Problem, wenn ein Job, der nicht in einer Anfrage sein sollte, sich in einem befindet.
Gilt das Limit für WP-CLI?
Befehlszeilen-PHP läuft standardmäßig ohne Ausführungszeitbegrenzung, weshalb lange Importe, Exporte und Migrationen dorthin gehören.
Ich habe es angesprochen und der Job scheitert immer noch an der gleichen Stelle.
Cron- und Web-Requests können unterschiedliche Werte tragen, und ein Proxy vor dem PHP kann ausfallen.
Ist das dasselbe wie ein 504?
Das ist PHP, das sich selbst stoppt; ein 504 ist der Webserver, der PHP aufgibt. Ein langer Job kann entweder produzieren, je nachdem, welche Uhr zuerst abläuft.
Verwandte Fehler

War es keiner davon?

Diese Fehler können im Browser ähnlich aussehen.