概述
fsockopen() 函数以 Socket 模拟 HTTP 协议,作用是可以用来打开一个socket连接,可以进行类似真实的http操作,可用于向一个或者多个用户发送多条模板消息等场景。
一、开启 fsockopen 函数
第一步,打开PHP配置文件php.ini,查找 allow_url_fopen ,将其设置为 on;
第二部,查找 extension=php_openssl.dll, 去掉前边的分号 ‘;’;
第三部,如果是IIS 就重启IIS,如果是apache 就重启apache。
二、代码实现(TP5.0框架下)
首先是发送多条微信模板消息的代码(大致逻辑):
public function sendMessage()
{
ignore_user_abort(true);
set_time_limit(0);
//以下为大致逻辑(不完整)
$msg = $_POST;
//POST传参
$message = getMessage($msg);
//获取消息内容
for($a=0;$a<count($message);$a++) {
$params = getParam;
//拼装发送消息的参数
$json_params = json_encode($params);
$url = 'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token='.$access_token;
self::https_request($url, urldecode($json_params));
sleep(3);
//给微信接口足够的响应时间
}
//异步请求不打印报错信息,将相关信息写入文件内便于调试
//file_put_contents('./app/home/controller/A.txt',date('Y-m-d H:i:s',time())."n".json_encode($message)."n",FILE_APPEND);die;
}
以上代码循环体内为了保证正常调用微信接口,使用了 sleep() 函数,正常的同步请求显然不能满足要求
以下代码封装 fsockopen(完整代码,实现异步就靠他了) ,一是建立一个一个socket连接,二是能够传参(POST)
public function doRequest($url, $param=array())
{
$urlInfo = parse_url($url);
$host = $urlInfo['host'];
$path = $urlInfo['path'];
$query = isset($param)? http_build_query($param) : '';
$port = 80;
$errno = 0;
$errstr = '';
$timeout = 60;
$fp = fsockopen($host, $port, $errno, $errstr, $timeout);
$out = "POST ".$path." HTTP/1.1rn";
$out .= "host:".$host."rn";
$out .= "content-length:".strlen($query)."rn";
$out .= "content-type:application/x-www-form-urlencodedrn";
$out .= "connection:closernrn";
$out .= $query;
fputs($fp, $out);
fclose($fp);
}
接下来就是入口文件,用于设置参数调用 doRequest() 函数实现异步请求
public function message($param) {
$url = 'http://www.xxx.com/yyy/zzz/sendMessage';
$this->doRequest($url, $param);
}
最后
以上就是隐形玉米为你收集整理的fsockopen 实现异步请求的全部内容,希望文章能够帮你解决fsockopen 实现异步请求所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复