Maison > Article > développement back-end > Plan d'implémentation du traitement asynchrone PHP
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); // 设置执行不超时