Implementierungsplan der asynchronen PHP-Verarbeitung

阿神
Freigeben: 2023-03-05 10:30:02
Original
3003 Leute haben es durchsucht

Manchmal führt eine Datei bei der Ausführung von PHP zu mehreren Vorgängen. Wenn Sie darauf warten, dass der Vorgang abgeschlossen wird, kommt es leicht zu einer Zeitüberschreitung. Zu diesem Zeitpunkt können wir die asynchrone Verarbeitung in Betracht ziehen. Die erste PHP-Datei kann zuerst einige einfache verarbeiten, und die zweite Datei verarbeitet zeitaufwändige Programme. Wenn wir beispielsweise nach erfolgreicher Operation ein Protokoll aufzeichnen müssen, können wir nach erfolgreicher Operation zurückkehren und das Protokoll dann asynchron verarbeiten. Im Folgenden führt Sie der PHP-Programmierer Lei Xuesong durch vier häufig verwendete asynchrone Verarbeitungslösungen in PHP.

1. Verwenden Sie die Front-End-Ajax-Verarbeitung

$.get("doAsync.php", { name: 'raykaeso',job:'PHP Programmer'} );
Nach dem Login kopieren

2. Verwenden Sie popen, um lokale Dateien auszuführen

pclose(popen('php /var/www/doAsync.php &', 'r'));
Nach dem Login kopieren

3. Verwenden Sie Curl

, um das Timeout von Curl CURLOPT_TIMEOUT auf 1 zu setzen (Minimum ist 1), sodass der Client 1 Sekunde warten muss und die Curl-Anforderungsadresse muss sei ein absoluter Pfad

$param = array(
'name'=>'raykaeso',
'job'=>'PHP Programmer'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://www.example.com/doAsync.php");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($param)); //将数组转换为URL请求字符串
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
curl_exec($ch);
curl_close($ch);
Nach dem Login kopieren

4. Wenn Sie fsockopen verwenden, müssen Sie den Header-Teil selbst verbinden

function doRequest($url, $param=array(),$timeout =10){
$urlParmas = parse_url($url);
$host = $urlParmas['host'];
$path = $urlParmas['path'];
$port = isset($urlParmas['port'])? $urlParmas['port'] :80;
$errno = 0;
$errstr = '';

$fp = fsockopen($host, $port, $errno, $errstr, $timeout);
$query = isset($param)? http_build_query($param) : '';
$out = "POST ".$path." HTTP/1.1\r\n";
$out .= "host:".$host."\r\n";
$out .= "content-length:".strlen($query)."\r\n";
$out .= "content-type:application/x-www-form-urlencoded\r\n";
$out .= "connection:close\r\n\r\n";
$out .= $query;

fputs($fp, $out);
fclose($fp);
}
$url = 'http://www.example.com/doAsync.php';
$param = array(
'name'=>'raykaeso',
'job'=>'PHP Programmer'
);
doRequest($url, $param);
Nach dem Login kopieren

Hinweis:
1. Wenn Sie Apache als Web-Server verwenden, müssen Sie zunächst „enablesendfile“ in der Apache-Konfigurationsdatei httpd.conf konfigurieren, damit PHP asynchron unterstützt.
2. Es wird empfohlen, die folgenden zwei Konfigurationen zur asynchron ausgeführten PHP-Datei hinzuzufügen:

ignore_user_abort(true); // 忽略客户端断开
set_time_limit(0); // 设置执行不超时
Nach dem Login kopieren
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage