背景:
小程序的的请求status 一直显示 pending(等待中),然后竟然转为cancel状态。
请求头出现 headProvisional headers are shown 。
解决过程:
直接找到对应的请求函数,然后添加fail:function反馈,才发现请求已经发出,但是失败了。后来看了下那个时间,20s之后。所以上网查小程序的请求时间,才发现小程序app.json里面限制了请求的时间,然后我发现限制为20s。
之后我看了下后台代码,没问题,然后将小程序请求的地址放到浏览器上,发现,25s左右,数据出来了。然后我才认真看了下getimagesize()这个函数。上网一查,这个函数真的耗时。
然后看到篇解决方案有启发,然后再结合php文档自己弄了个差不多的。
https://www.v2ex.com/t/286977(看楼主下面的解决方案)
https://www.php.net/manual/zh/reserved.variables.httpresponseheader.php (文档函数)
然后自己写了个
/**
* 用于判断图片是否有效
* @param $url 图片路径,包括文件名
*/
function get_contents($url) {
@file_get_contents("http://example.com"); //加‘@’防止报错,导致前端获取数据异常
if(strtoupper($http_response_header[0]) == "HTTP/1.0 200 OK"){ //$http_response_header[0]最好自己事先看看返回值是什么 大小写,不确定直接用str类函数将字符串处理全大写
return true;
}else{
return false;
}
}
-------------------------------------------------------更新然而这个方法依然不行依然速度没法跟上-----
https://blog.csdn.net/luogan129/article/details/76836829
特地粘贴大佬的地址,好快的curl;里面的
function curl_file_get_contents($durl){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $durl);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_USERAGENT, _USERAGENT_);
curl_setopt($ch, CURLOPT_REFERER,_REFERER_);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$r = curl_exec($ch);
curl_close($ch);
return $r;
}
关键代码,,直接20多秒压缩到5s,6s左右。这个方案可以啊,暂时结案了。