


Codebeispiel für die Verwendung von fscok zur Implementierung eines asynchronen Aufrufs von PHP
Der Webserver führt ein Skript aus, das möglicherweise in wenigen Millisekunden oder auch nicht in mehreren Minuten abgeschlossen ist. Wenn das Programm langsam ausgeführt wird, hat der Benutzer möglicherweise nicht die Geduld, länger zu warten und den Browser zu schließen.
Manchmal kümmern wir uns nicht einmal um die Ausführungsergebnisse dieser zeitaufwändigen Skripte, sondern wir müssen warten, bis die Ausführung abgeschlossen ist und sie zurückkehren, bevor wir mit dem nächsten Schritt fortfahren können.
Gibt es also eine Möglichkeit, einfach den Aufruf dieser zeitaufwändigen Skripte auszulösen und dann mit dem nächsten Schritt fortzufahren, sodass diese zeitaufwändigen Skripte serverseitig langsam ausgeführt werden können?
Als nächstes werde ich fscokopen verwenden, um diese Funktion zu implementieren.
using socket using using using socket
mit fsockopen. fscokopen gibt ein Handle für die Remote-Host-Verbindung zurück. Sie können fwrite,
fgets, fread und andere Operationen an ihr ausführen, genau wie mit dem von fopen zurückgegebenen Handle.
Der wichtigste gewünschte Effekt unseres asynchronen PHP besteht darin, ein PHP-Skript auszulösen und dann sofort zurückzukehren, sodass es langsam auf der Serverseite ausgeführt werden kann. Ich habe vorhin auch einen Artikel geschrieben, um dieses Problem zu diskutieren.
function triggerRequest($url, $post_data = array(), $cookie = array())…{ $method = "GET"; //可以通过POST或者GET传递一些参数给要触发的脚本 $url_array = parse_url($url); //获取URL信息,以便平凑HTTP HEADER $port = isset($url_array['port'])? $url_array['port'] : 80; $fp = fsockopen($url_array['host'], $port, $errno, $errstr, 30); if (!$fp) …{ return FALSE; } $getPath = $url_array['path'] ."?". $url_array['query']; if(!empty($post_data))…{ $method = "POST"; } $header = $method . " " . $getPath; $header .= " HTTP/1.1\r\n"; $header .= "Host: ". $url_array['host'] . "\r\n "; //HTTP 1.1 Host域不能省略 /**//*以下头信息域可以省略 $header .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13 \r\n"; $header .= "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,q=0.5 \r\n"; $header .= "Accept-Language: en-us,en;q=0.5 "; $header .= "Accept-Encoding: gzip,deflate\r\n"; */ $header .= "Connection:Close\r\n"; if(!empty($cookie))…{ $_cookie = strval(NULL); foreach($cookie as $k => $v)…{ $_cookie .= $k."=".$v."; "; } $cookie_str = "Cookie: " . base64_encode($_cookie) ." \r\n";//传递Cookie $header .= $cookie_str; } if(!empty($post_data))…{ $_post = strval(NULL); foreach($post_data as $k => $v)…{ $_post .= $k."=".$v."&"; } $post_str = "Content-Type: application/x-www-form-urlencoded\r\n";//POST数据 $post_str .= "Content-Length: ". strlen($_post) ." \r\n";//POST数据的长度 $post_str .= $_post."\r\n\r\n "; //传递POST数据 $header .= $post_str; } fwrite($fp, $header); //echo fread($fp, 1024); //我们不关心服务器返回 fclose($fp); return true; }
Status bei, der drei mögliche Zustände hat:
* 0 – NORMAL (normal) * 1 - ABORTED (abnormaler Exit) * 2 - TIMEOUT (Timeout) Wenn das PHP-Skript normal im NORMAL-Zustand ausgeführt wird, ist die Verbindung gültig. Wenn der 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 (siehe Funktion set_time_limit()), wird das Flag für den TIMEOUT-Status aktiviert.
Sie können 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“ in php.ini oder durch die entsprechenden „php_value“-Funktionen „ignore_user_abort“ und „ignore_user_abort()“ in den Apache-.conf-Einstellungen gesteuert werden. Wenn PHP nicht angewiesen wird, Benutzerunterbrechungen zu ignorieren, wird das Skript unterbrochen, es sei denn über register_shutdown_function() Die Shutdown-Trigger-Funktion ist eingestellt. Wenn der Remote-Benutzer auf die Schaltfläche „STOP“ 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 Festlegen von max_execution_time in php.ini oder dem entsprechenden Parameter „php_value max_execution_time“ in den Apache .conf-Einstellungen oder der Funktion set_time_limit() 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 eine Zeitüberschreitung zu einem Aufruf der das Herunterfahren auslösenden Funktion führt, kehrt die Funktion zurück 2. 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.所以还在要触发的脚本中指明:
ignore_user_abort(TRUE); //如果客户端断开连接,不会引起脚本 abort.set_time_limit(0);//取消脚本执行延时上限
或者,也可以使用:
register_shutdown_function(callback fuction[, parameters]);//注册脚本退出时执行的函数
Das obige ist der detaillierte Inhalt vonCodebeispiel für die Verwendung von fscok zur Implementierung eines asynchronen Aufrufs von PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



In diesem Kapitel werden wir die Umgebungsvariablen, die allgemeine Konfiguration, die Datenbankkonfiguration und die E-Mail-Konfiguration in CakePHP verstehen.

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

Um in cakephp4 mit Datum und Uhrzeit zu arbeiten, verwenden wir die verfügbare FrozenTime-Klasse.

Das Arbeiten mit der Datenbank in CakePHP ist sehr einfach. In diesem Kapitel werden wir die CRUD-Operationen (Erstellen, Lesen, Aktualisieren, Löschen) verstehen.

Um am Datei-Upload zu arbeiten, verwenden wir den Formular-Helfer. Hier ist ein Beispiel für den Datei-Upload.

In diesem Kapitel lernen wir die folgenden Themen im Zusammenhang mit dem Routing kennen.

CakePHP ist ein Open-Source-Framework für PHP. Es soll die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich vereinfachen. CakePHP basiert auf einer MVC-ähnlichen Architektur, die sowohl leistungsstark als auch leicht zu verstehen ist. Modelle, Ansichten und Controller gu

Der Validator kann durch Hinzufügen der folgenden zwei Zeilen im Controller erstellt werden.
