Home > Backend Development > PHP Tutorial > Implementation plan of PHP asynchronous processing

Implementation plan of PHP asynchronous processing

阿神
Release: 2023-03-05 10:30:02
Original
3029 people have browsed it

Sometimes when executing PHP, a file has multiple operations. If you wait for the operation to be completed, it will easily time out. At this time, we can consider asynchronous processing. Multiple operations are divided into two PHP file operations. The first PHP file can process some simple ones first, and the second file processes time-consuming programs asynchronously. For example, if we need to record a log after the operation is successful, then we can return when the operation is successful, and then process the log asynchronously. Below, PHP programmer Lei Xuesong takes you through four commonly used asynchronous processing solutions in PHP.

1. Use front-end Ajax processing

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

2. Use popen to execute local files

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

3. Use curl

to set the curl timeout CURLOPT_TIMEOUT to 1 (minimum is 1), so the client needs to wait for 1 second, and the curl request address must be an absolute path

$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);
Copy after login

4. When using fsockopen, you need to splice the header part yourself

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);
Copy after login

Note:
1. If you use Apache as a web server, you must first enable PHP to support asynchronous You must configure enablesendfile on in the Apache configuration file httpd.conf.
2. It is recommended to add the following two configurations to the asynchronously executed PHP file:

ignore_user_abort(true); // 忽略客户端断开
set_time_limit(0); // 设置执行不超时
Copy after login
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template