Aktueller Standort: Startseite> Neueste Artikel> Verwenden Sie Ignore_User_abort in langlebigen Aufgaben, um PHP-Skript-Zeitüberschreitungen zu vermeiden

Verwenden Sie Ignore_User_abort in langlebigen Aufgaben, um PHP-Skript-Zeitüberschreitungen zu vermeiden

gitbox 2025-05-29

Bei Verwendung von PHP zur Ausführung langfristiger Aufgaben begegnen wir häufig auf eine Situation, in der der Benutzer den Browser schließt oder die Anforderung aktiv trennen, und das PHP-Skript wird abgebrochen. Dies ist sehr tödlich für Skripte, die langfristig ausgeführt oder kontinuierlich verarbeitet werden müssen. Wie kann es also verhindern, dass das Skript abgebrochen wird, wenn der Benutzer getrennt wird? Die Antwort besteht darin, die Funktion ignore_user_abort () zu verwenden.

Was ist Ignore_User_abort?

Ignore_User_abort () ist eine Funktion, die von PHP bereitgestellt wird, um festzustellen, ob das Skript weiter ausgeführt wird, wenn der Client die Verbindung abbricht.

 ignore_user_abort(true);

Wenn ein echter Parameter übergeben wird, wird das PHP -Skript auch dann weiter ausgeführt, wenn der Benutzer den Browser schließt, bis die Ausführung abgeschlossen ist oder ausgeführt wird/aktiv beendet ist.

Anwendungsszenarien von ignore_user_abort

  • Asynchrone Aufgaben erledigen

  • Hintergrundwarteschlangenverarbeitung

  • Zeitgesteuerte Aufgabensimulationsausführung

  • Dateigenerierung oder Big Data Export

  • Backstage -Operationen, die die staatliche Konsistenz aufrechterhalten müssen

Um ein praktisches Beispiel zu geben, wenn Sie eine Systemsicherungsfunktion entwickeln, muss das Skript nach Abschluss des Benutzers mehr als zehn Minuten ausgeführt werden. Wenn der Benutzer den Browser schließt, wird das Skript standardmäßig abgebrochen und die Sicherungsaufgabe fällt fehl. Und durch Ignore_User_abort (True) , auch wenn der Benutzer die Seite verlässt, wird das Skript weiterhin auf dem Server ausgeführt, bis die Sicherung abgeschlossen ist.

So verwenden Sie ignore_user_abort

Hier ist ein typisches Beispiel für lange Aufgabenverarbeitungscode:

 <?php
ignore_user_abort(true); // Setzen Sie die Ausführung fort, auch wenn der Benutzer die Verbindung durchbricht
set_time_limit(0); // Skriptausführungszeitlimit abbrechen

file_put_contents('log.txt', "Missionsstartzeit:" . date('Y-m-d H:i:s') . "\n", FILE_APPEND);

// Simulieren Sie eine langfristige Aufgabe
for ($i = 1; $i <= 10; $i++) {
    file_put_contents('log.txt', "1. {$i} Schritt-für-Schritt-Ausführung...\n", FILE_APPEND);
    sleep(5); // Zeitaufwändig für jeden Schritt der Simulation
}

file_put_contents('log.txt', "Aufgabenabschlusszeit:" . date('Y-m-d H:i:s') . "\n", FILE_APPEND);
?>

Sie können dieses Skript über Curl- oder AJAX -Anfragen aufrufen, z. B.:

 fetch("https://gitbox.net/run-task.php");

Selbst wenn der Benutzer den Browser nach dem Senden der Anforderung schließt, wird das Skript vollständig ausgeführt.

Überprüfen Sie den Verbindungsstatus

Wenn Sie eine logische Verarbeitung durchführen möchten, nachdem der Benutzer getrennt ist, z. B. das Schreiben von Protokollen oder das Abbrechen bestimmter Verhaltensweisen, können Sie die Funktion Connection_aborted () verwenden, um festzustellen:

 if (connection_aborted()) {
    file_put_contents('log.txt', "Die Benutzerverbindung wurde unterbrochen\n", FILE_APPEND);
}

Mit ignore_user_abort (true) können Sie flexiblere Interrupts und Nichtversuche flexibler verarbeiten.

Dinge zu beachten

  • Mit ignore_user_abort () bedeutet nicht, dass Sie alle Ausnahmen ignorieren können. Interrupts können auch von der Serverseite (z. B. Nginx, Apache -Konfiguration) oder im PHP -Skript selbst (z. B. Speichergrenze) kommen.

  • Es wird empfohlen , set_time_limit (0) gleichzeitig zu verwenden, um das maximale Ausführungszeitlimit abzubrechen.

  • Wenn das Skript Daten an den Client ausgibt, versuchen Sie, OB_Start () zu verwenden, um die Pufferung vor der Logik zu aktivieren, um Verbindungsprobleme zu vermeiden, die durch das Ausgangsverhalten verursacht werden.

Zusammenfassen

Wenn Sie lange Aufgaben in PHP bearbeiten, ist die Verwendung von ignore_user_abort (true) eine effektive Möglichkeit, um sicherzustellen, dass das Skript vom Benutzer in der Mitte nicht unterbrochen wird. Es kann sicherstellen, dass Aufgaben auf der Serverseite vollständig ausgeführt werden und die Stabilität und Zuverlässigkeit des Systems verbessern. Dies ist ein sehr praktischer Trick für Hintergrundskripte mit Aufgaben wie Backup, Push, Export usw.