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

Plan d'implémentation du traitement asynchrone PHP

阿神
Libérer: 2023-03-05 10:30:02
original
3048 Les gens l'ont consulté

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'} );
Copier après la connexion

2. Utilisez popen pour exécuter des fichiers locaux

pclose(popen('php /var/www/doAsync.php &', 'r'));
Copier après la connexion

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);
Copier après la connexion

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);
Copier après la connexion

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); // 设置执行不超时
Copier après la connexion
Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal