Viele Leute wissen nicht, was geplante PHP-Aufgaben sind, aber in unserer täglichen Entwicklung müssen unsere PHP-Programme häufig Aufgabenpläne ausführen und diese regelmäßig ausführen. Deshalb stellen wir Ihnen heute php-Analyse zur Implementierung vor Prinzip der geplanten Aufgabe !
Eine kurze Einführung in einige relevante Kenntnisse basierend auf dem PHP-Handbuch:
1. Verbindungsverarbeitung:
Innerhalb von PHP behält das System den Verbindungsstatus bei und sein Status hat drei mögliche Situationen:
0 - NORMAL (normal)
1 - ABORTED (abnormaler Ausgang)
2 - TIMEOUT (Timeout)
Wenn PHP Die Verbindung ist gültig, wenn das Skript normal im NORMAL-Zustand ausgeführt wird. Wenn der Remote-Client die Verbindung trennt, wird das Statusflag ABORTED aktiviert. Eine Unterbrechung der Remote-Client-Verbindung wird normalerweise dadurch verursacht, dass der Benutzer auf die Schaltfläche STOP klickt. Wenn die Verbindungszeit das Zeitlimit von PHP überschreitet, wird das Statusflag TIMEOUT aktiviert.
kann entscheiden, ob das Skript beendet werden muss, wenn der Client die Verbindung trennt. Manchmal ist es praktisch, ein Skript vollständig ausführen zu lassen, auch wenn kein Remote-Browser die Ausgabe des Skripts akzeptiert. Standardmäßig wird das Skript beendet, wenn die Remote-Client-Verbindung unterbrochen wird.
Diese Verarbeitung kann durch ignore_user_abort
von php.ini oder durch die entsprechenden „Apache .conf
“- und php_value ignore_user_abort
-Funktionen in den ignore_user_abort()
-Einstellungen gesteuert werden.
Wenn PHP nicht angewiesen wird, Benutzerunterbrechungen zu ignorieren, wird das Skript unterbrochen, es sei denn, über register_shutdown_function() wird eine Triggerfunktion zum Herunterfahren festgelegt. Wenn der Remote-Benutzer auf die STOP-Schaltfläche klickt und das Skript erneut versucht, Daten auszugeben, erkennt PHP über diese Schließtriggerfunktion, dass die Verbindung unterbrochen wurde und ruft die Schließtriggerfunktion auf.
Skripte können auch durch den integrierten Skript-Timer unterbrochen werden. Das Standard-Timeout-Limit beträgt 30 Sekunden. Dieser Wert kann durch Setzen des entsprechenden „max_execution_time
“-Parameters oder der Apache .conf
-Funktion in den php_value max_execution_time
- oder set_time_limit()
-Einstellungen von php.ini geändert werden.
Wenn der Zähler abläuft, wird das Skript ähnlich wie in der oben genannten Verbindungsunterbrechungssituation beendet und die zuvor registrierte Auslöserfunktion zum Herunterfahren wird zu diesem Zeitpunkt ebenfalls ausgeführt. In der Shutdown-Trigger-Funktion können Sie durch Aufrufen der Funktion connection_status()
überprüfen, ob das Timeout dazu geführt hat, dass die Shutdown-Trigger-Funktion aufgerufen wurde.
Wenn ein Timeout zu einem Aufruf der Shutdown-Trigger-Funktion führt, gibt diese Funktion 2 zurück.
Zu beachten ist, dass die Zustände ABORTED
und TIMEOUT
gleichzeitig gültig sein können.
Dies ist möglich, wenn PHP angewiesen wird, Benutzer-Exit-Aktionen zu ignorieren. PHP wird weiterhin bemerken, dass der Benutzer die Verbindung getrennt hat, das Skript jedoch weiterhin ausgeführt wird. Bei Erreichen des Laufzeitlimits wird das Skript beendet und die eingestellte Shutdown-Trigger-Funktion ebenfalls ausgeführt. An dieser Stelle werden Sie feststellen, dass die Funktion „connection_status()“ den Wert 3 zurückgibt.
2. Verwandte Funktionen:
int ignore_user_abort ( [bool setting] ) This function sets whether a client disconnect should cause a script to be aborted. It will return the previous setting and can be called without an argument to not change the current setting and only return the current setting. int connection_aborted ( void ) Returns TRUE if client disconnected. int connection_status ( void ) Returns the connection status bitfield.
Um eine bestimmte Datei regelmäßig zu aktualisieren, benötigt das Programm Ich habe zwei Methoden aus dem Internet gefunden: Die Funktionen ignore_user_abort()
und crontab
ignore_user_abort()
können mit set_time_limit(0)
und sleep($interval)
kombiniert werden, um die automatische Ausführung und Aktualisierung von Programmen zu realisieren . Hier ist ein Beispiel
Der Code lautet wie folgt:
ignore_user_abort(); //即使Client断开(如关掉浏览器),PHP脚本也可以继续执行. set_time_limit(0); // 执行时间为无限制,php默认的执行时间是30秒,通过set_time_limit(0)可以让程序无限制的执行下去 $interval=60*5; // 每隔5分钟运行 do{ $fp = fopen('test.txt','a'); fwrite($fp,'test'); fclose($fp); sleep($interval); // 等待5分钟 }while(true);
Solange Sie die obige Seite ausführen und dann schließen, wird das Programm weiter ausgeführt.
Unter Linux gibt es eine einfachere Methode, nämlich den Befehl crontab
Die Funktion des Befehls crontab ist In bestimmten Zeitabständen wird die Ausführung einiger Befehle geplant.
Crontab-Nutzung: crontab [ -e | -l | -r ] 文件名
-e: Aufgabe bearbeiten
-l: Aufgabeninformationen anzeigen
-r: Geplante Aufgabeninformationen löschen
crontab-Format:
* * * * * Command
Befehle, die nach Zeit, Tag, Monat und Woche ausgeführt werden sollen
Beispiel für Crontab:
*/5 * * * * lynx //m.sbmmt.com
Zugriff alle 5 Minuten www .php.cn
0 8 * * * lynx //m.sbmmt.com
Besuchen Sie m.sbmmt.com
0 10 6 * 1-5 lynx //m.sbmmt.com
jeden Tag am 6. jedes Monats und jede Woche um 8 Uhr. Besuchen Sie www .php.cn um 10 Uhr von Montag bis Freitag
0 5 7 8 * lynx //m.sbmmt.com
Besuchen Sie m.sbmmt.com um 5 Uhr am 7. August
Ein paar spezielle Bedeutungen oben:
„*“ steht für alle Zahlen innerhalb des Wertebereichs, „/“ steht für alle, „*/5“ steht für alle 5 Einheiten, „-“ steht für ab einer bestimmten Zahl auf eine bestimmte Zahl, „“, trennt mehrere diskrete Zahlen.
Zusammenfassung:
Ich glaube, dass viele Freunde durch das Studium dieses Artikels das Implementierungsprinzip von PHP-geplanten Aufgaben kennen sollten Ich hoffe, dass es für Ihre Arbeit hilfreich sein wird!
Verwandte Empfehlungen:
PHP-Beispiele für geplante Aufgaben
php implementiert geplante Aufgaben und kontinuierliche Prozessinstanzen fsockopen
Das obige ist der detaillierte Inhalt vonPrinzipielle Analyse der PHP-Implementierung geplanter Aufgaben. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!