getimagesize严重的耗时问题

背景:

小程序的的请求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左右。这个方案可以啊,暂时结案了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值