Maison  >  Article  >  développement back-end  >  Plan d'implémentation du traitement asynchrone PHP

Plan d'implémentation du traitement asynchrone PHP

阿神
阿神original
2017-01-24 14:16:032969parcourir

Parfois lors de l'exécution de PHP, un fichier comporte plusieurs opérations. Si vous attendez que l'opération soit terminée, elle expirera facilement. À l'heure actuelle, nous pouvons envisager un traitement asynchrone. Plusieurs opérations sont divisées en deux opérations sur les fichiers PHP. Le premier fichier PHP peut d'abord traiter certaines opérations simples, et le deuxième fichier traite les programmes fastidieux. Par exemple, si nous devons enregistrer un journal une fois l'opération réussie, nous pouvons revenir lorsque l'opération est réussie, puis traiter le journal de manière asynchrone. Ci-dessous, le programmeur PHP Lei Xuesong vous présente quatre solutions de traitement asynchrone couramment utilisées en PHP.

1. Utilisez le traitement Ajax frontal

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

2. Utilisez popen pour exécuter des fichiers locaux

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

3. Utilisez curl

pour définir le délai d'attente curl CURLOPT_TIMEOUT sur 1 (le minimum est 1), le client doit donc attendre 1 seconde et la demande curl l'adresse doit être un chemin absolu

$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 Lorsque vous utilisez fsockopen, vous devez épisser vous-même la partie d'en-tête

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

Remarque :
1. Si vous utilisez Apache comme serveur Web, pour que PHP prenne en charge l'asynchrone, vous devez d'abord configurer makesendfile on dans le fichier de configuration Apache httpd.conf.
2. Il est recommandé d'ajouter les deux configurations suivantes au fichier PHP exécuté de manière asynchrone :

ignore_user_abort(true); // 忽略客户端断开
set_time_limit(0); // 设置执行不超时
Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn