php 打开 url 响应时间长达 10 秒,同网络环境下浏览器秒开 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
imydou
0.61D
V2EX    微信

php 打开 url 响应时间长达 10 秒,同网络环境下浏览器秒开

  •  
  •   imydou 2015-09-23 13:07:53 +08:00 3816 次点击
    这是一个创建于 3683 天前的主题,其中的信息可能已经有所发展或是发生改变。

    微信企业号 api
    比如用 file_get_contents 或者 fopen 打开接口链接获取 token ,
    函数执行前打印的时间戳和执行后打印的时间戳相差 10 秒(多网段服务器、本地网络测试均如此)。
    但链接直接用浏览器打开却秒开。

    为什么?

    9 条回复    2018-09-27 18:58:21 +08:00
    explon
        1
    explon  
       2015-09-23 13:12:41 +08:00
    用 CURL 试试
    gaitana
        2
    gaitana  
       2015-09-23 13:14:32 +08:00
    php 不会缓存 DNS ,把 php 访问的域名 IP 地址写入 hosts 即可解决此问题。
    iyaozhen
        3
    iyaozhen  
       2015-09-23 13:16:32 +08:00
    可能是这两个问题:
    1. DNS 解析过慢,换个 DNS ,或者直接写死 hosts
    2. file_get_contents 有时容易夯住,建议使用 curl
    imydou
        4
    imydou  
    OP
       2015-09-23 13:17:00 +08:00
    @gaitana 并非,测试给用户发送信息接口时,触发瞬间微信收到信, 10 秒后接口才返回执行字符串。
    imydou
        5
    imydou  
    OP
       2015-09-23 13:18:12 +08:00
    @explon
    @iyaozhen 感谢指点, curl 可以了,
    本来偷懒不用 curl 能少写几行代码,不想遇到诡异问题。
    iyaozhen
        6
    iyaozhen  
       2015-09-23 13:21:44 +08:00   1
    @imydou file_get_contents 有其它设置可以避免夯住。你可以把 curl 封装下呗,到时也需要一些 POST 请求需要 curl 处理的。
    explon
        7
    explon  
       2015-09-23 13:23:05 +08:00   1
    @imydou

    function curl_get_contents($url, $timeout = 10)
    {
    if (!function_exists('curl_init'))
    {
    die('CURL not support');
    }

    $curl = curl_init();

    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($curl, CURLOPT_HEADER, FALSE);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE);

    if (defined('WECENTER_CURL_USERAGENT'))
    {
    curl_setopt($curl, CURLOPT_USERAGENT, WECENTER_CURL_USERAGENT);
    }
    else
    {
    curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/600.7.12 (KHTML, like Gecko) Version/8.0.7 Safari/600.7.12');
    }

    if (substr($url, 0, 8) == 'https://')
    {
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);

    curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
    }

    $result = curl_exec($curl);

    curl_close($curl);

    return $result;
    }
    Rimifon
        8
    Rimifon  
       2018-09-27 18:54:32 +08:00
    遇到了同样的问题,file_get_contents、fsocketopen、curl 三个都试了,都需要 10 秒钟。但是用浏览器访问秒开(同一主机)。用 fsocketopen 监控的时候发现在打开端口的时候就花掉了 9 秒钟,后续其实是很快的。为什么?
    Rimifon
        9
    Rimifon  
       2018-09-27 18:58:21 +08:00
    排除 DNS 问题,因为使用 fsocketopen 的时候直接使用 IP 地址也一样要 9 秒。而且只有访问这台服务器的时候后卡这么久,其他服务器正常。代码在本地主机上调试正常。有点感觉对方的服务器阻止了我们服务器的请求一样。但如果被阻止了,为什么浏览器又可以秒开呢?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1077 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 17:56 PVG 01:56 LAX 10:56 JFK 13:56
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86