Heim  >  Artikel  >  Backend-Entwicklung  >  Implementierungsplan der asynchronen PHP-Verarbeitung

Implementierungsplan der asynchronen PHP-Verarbeitung

阿神
阿神Original
2017-01-24 14:16:032969Durchsuche

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'} );

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

pclose(popen('php /var/www/doAsync.php &', 'r'));

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);

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);

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); // 设置执行不超时
Stellungnahme:
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