Heim  >  Artikel  >  Backend-Entwicklung  >  Fünf Möglichkeiten, geplante Aufgaben in PHP zu implementieren

Fünf Möglichkeiten, geplante Aufgaben in PHP zu implementieren

藏色散人
藏色散人nach vorne
2021-02-02 16:12:5810194Durchsuche

Geplante laufende Aufgaben sind eine relativ wichtige Aufgabe für eine Website, wie z. B. das regelmäßige Veröffentlichen von Dokumenten, das regelmäßige Bereinigen von Junk-Informationen usw. Die meisten heutigen Websites werden mit der dynamischen PHP-Sprache entwickelt, und die Implementierung von PHP bestimmt dies. Es gibt kein Konzept dafür AppServer wie Java und .Net sowie das HTTP-Protokoll sind zustandslose Protokolle, die nur vom Benutzer ausgelöst und aufgerufen werden können. Nach dem Aufruf wird der Speicher automatisch verlassen.

Empfehlung: „php-Video-Tutorial

Wenn Sie PHP verwenden müssen, um geplante Aufgaben umzusetzen, können Sie folgende Lösungen haben:

1. Einfach und direkt ohne Rücksicht auf die Konsequenzen

<?php
ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行.
set_time_limit(0);// 通过set_time_limit(0)可以让程序无限制的执行下去
ini_set(&#39;memory_limit&#39;,&#39;512M&#39;); // 设置内存限制
$interval=60*30;// 每隔半小时运行
do{
  //ToDo 
  sleep($interval);// 等待5分钟
}
while(true);

Nachteile: Nach dem Start ist es unkontrollierbar, es sei denn, Sie beenden den PHP-Host, es sei denn, Sie sind ein Hacker.

config.php

<?php
return 1;
?>

ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行.
set_time_limit(0);// 通过set_time_limit(0)可以让程序无限制的执行下去
$interval=60*30;// 每隔半小时运行
do{
  $run = include &#39;config.php&#39;;
  if(!$run) die(&#39;process abort&#39;);
   
  //ToDo
  sleep($interval);// 等待5分钟
}
while(true);

die Rückgabe von 0 von config.php, um das Programm zu stoppen, besteht darin, mit der Datei config.php und einem speziellen Formular zu interagieren und einige Variablen über die HTML-Seite für die Konfiguration festzulegen. Nachteile: Beanspruchung von Systemressourcen, Ausführung Auf lange Sicht wird es einige unerwartete versteckte Gefahren geben. Zum Beispiel Speicherverwaltungsprobleme.

Der Ruhezustand des PHP-Skripts wird nach einer gewissen Zeit fortgesetzt, indem auf sich selbst zugegriffen wird ... Auf diese Weise wird die Ausführungszeit jedes PHP verkürzt Das Skript kann garantiert nicht zu lang sein. Es wird nicht durch time_out eingeschränkt. Da jeder Zyklus der PHP-Datei unabhängig ausgeführt wird, vermeidet diese Methode die Einschränkung von time_out oben. cofig.php, damit der Prozess beendet werden kann

Vom Server geplante Aufgaben

Wenn Sie ein Unix-System verwenden, müssen Sie vorne eine spezielle Codezeile hinzufügen Ihres PHP-Skripts, damit es ausgeführt werden kann, sodass das System weiß, welches Programm es zum Ausführen des Skripts verwenden muss. Die für Unix-Systeme hinzugefügte erste Codezeile hat keinen Einfluss auf die Ausführung des Skripts unter Windows, sodass Sie diese Methode auch zum Schreiben plattformübergreifender Skripte verwenden können.

1. Verwenden Sie PHP, um das Skript in Crontab auszuführen.

Verwenden Sie wie beim Aufrufen eines normalen Shell-Skripts in Crontab (spezifische Crontab-Verwendung) das PHP-Programm, um das PHP-Skript aufzurufen, und führen Sie myscript.php jede Stunde wie folgt aus :

<?php
$time=15;
$url="http://".$_SERVER[&#39;HTTP_HOST&#39;].$_SERVER[&#39;REQUEST_URI&#39;];
/*
  function
*/
sleep($time);
file_get_contents($url);
?>
/usr/local/bin/php ist der Pfad des PHP-Programms.

2. Verwenden Sie eine URL, um Skripte in Crontab auszuführen.

Wenn Ihr PHP-Skript per URL ausgelöst werden kann, können Sie Lynx, Curl oder Wget verwenden, um Ihr Crontab zu konfigurieren.

Das folgende Beispiel besteht darin, mithilfe des Lynx-Textbrowsers auf die URL zuzugreifen, um stündlich ein PHP-Skript auszuführen. Der Lynx-Textbrowser verwendet standardmäßig den Konversationsmodus zum Öffnen von URLs. Wie unten gezeigt, verwenden wir jedoch die Option -dump in der Lynx-Befehlszeile, um die URL-Ausgabe in die Standardausgabe umzuwandeln.

# crontab -e
00 * * * * /usr/local/bin/php /home/john/myscript.php
Das folgende Beispiel besteht darin, mit CURL auf die URL zuzugreifen, um alle 5 Minuten ein PHP-Skript auszuführen. Curl zeigt die Ausgabe standardmäßig auf der Standardausgabe an. Mit der Option „curl -o“ können Sie die Ausgabe des Skripts auch in eine temporäre Datei temp.txt sichern.

00 * * * * lynx -dump http://www.sf.net/myscript.php

Das folgende Beispiel besteht darin, mit WGET auf die URL zuzugreifen, um alle 10 Minuten ein PHP-Skript auszuführen. Die Option -q gibt den Ruhemodus an. „-O temp.txt“ bedeutet, dass die Ausgabe an eine temporäre Datei gesendet wird.

*/5 * * * * /usr/bin/curl -o temp.txt http://www.sf.net/myscript.php

5. Detaillierte Erläuterung der Verwendung der ini_set-Funktion

PHP ini_set wird verwendet, um den Wert von php.ini festzulegen, der wirksam wird, wenn die Funktion ausgeführt wird. Nach Beendigung des Skripts wird die Einstellung ungültig. Sie können die Konfiguration ändern, ohne die Datei php.ini zu öffnen, was für virtuelle Räume sehr praktisch ist.

Funktionsformat:

*/10 * * * * /usr/bin/wget -q -O temp.txt http://www.sf.net/myscript.php

Nicht alle Parameter können konfiguriert werden, Sie können die Liste im Handbuch einsehen.

Allgemeine Einstellungen:

string ini_set(string $varname, string $newvalue)

menory_limit: Legen Sie die maximale Anzahl an Speicherbytes fest, die ein Skript beantragen kann, was dazu beiträgt, dass schlecht geschriebene Skripte den verfügbaren Speicher auf dem Server verbrauchen. Das @-Symbol bedeutet, dass keine Fehler ausgegeben werden.

@ ini_set(&#39;memory_limit&#39;, &#39;64M&#39;);

display_errors: Legen Sie die Kategorie der Fehlermeldungen fest.

@ini_set(&#39;display_errors&#39;, 1);
session.auto_start: Ob die Sitzungsverarbeitung automatisch geöffnet werden soll. Wenn der Wert auf 1 gesetzt ist, können Sie session anstelle von session_start() verwenden, um die Sitzung manuell im Programm zu öffnen.

Wenn der Parameter 0 ist und die Sitzung nicht geöffnet wird manuell wird ein Fehler gemeldet.

@ini_set(&#39;session.auto_start&#39;, 0);

session.cache_expire: Gibt das Ablaufdatum (Minuten) der angegebenen Sitzungsseite im Client-Cache an. Der Standardwert ist 180 Minuten. Wenn session.cache_limiter=nocache gesetzt ist, ist die Einstellung hier ungültig.

@ini_set(&#39;session.cache_expire&#39;, 180);

session.use_cookies: Ob Cookies zum Speichern von Sitzungs-IDs auf dem Client verwendet werden sollen;

@ini_set(&#39;session.use_cookies&#39;, 1);

session.use_trans_sid: Ob Klarcode zum Anzeigen der SID (Sitzungs-ID) in der URL verwendet werden soll,

Die Standardeinstellung ist verboten birgt für den Benutzer Sicherheitsrisiken:

Benutzer können anderen Personen die URL mit einer gültigen SID per E-Mail/IRC/QQ/MSN usw. mitteilen.

URLs mit gültigen Seiten können auf öffentlichen Computern gespeichert werden.

Benutzer können URLs mit festen SIDs in ihren Favoriten oder im Browserverlauf speichern. Die URL-basierte Sitzungsverwaltung birgt immer mehr Risiken als die Cookie-basierte Sitzungsverwaltung und sollte deaktiviert werden.

PHP-geplante Aufgaben sind eine sehr interessante Sache. Die oben genannten sind einige der in diesem Artikel bereitgestellten Lösungen. Sie können anhand der Ideen dieses Artikels auch Ihre eigene Lösung entwickeln. Ich hoffe, es kann allen Bedürftigen helfen.

Das obige ist der detaillierte Inhalt vonFünf Möglichkeiten, geplante Aufgaben in PHP zu implementieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen