php 打开 url 响应时间长达 10 秒,同网络环境下浏览器秒开 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
imydou
0.61D

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

  •  
  •   imydou Sep 23, 2015 4067 views
    This topic created in 3872 days ago, the information mentioned may be changed or developed.

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

    为什么?

    9 replies    2018-09-27 18:58:21 +08:00
    explon
        1
    explon  
       Sep 23, 2015
    用 CURL 试试
    gaitana
        2
    gaitana  
       Sep 23, 2015
    php 不会缓存 DNS ,把 php 访问的域名 IP 地址写入 hosts 即可解决此问题。
    iyaozhen
        3
    iyaozhen  
       Sep 23, 2015
    可能是这两个问题:
    1. DNS 解析过慢,换个 DNS ,或者直接写死 hosts
    2. file_get_contents 有时容易夯住,建议使用 curl
    imydou
        4
    imydou  
    OP
       Sep 23, 2015
    @gaitana 并非,测试给用户发送信息接口时,触发瞬间微信收到信息, 10 秒后接口才返回执行字符串。
    imydou
        5
    imydou  
    OP
       Sep 23, 2015
    @explon
    @iyaozhen 感谢指点, curl 可以了,
    本来偷懒不用 curl 能少写几行代码,不想遇到诡异问题。
    iyaozhen
        6
    iyaozhen  
       Sep 23, 2015   1
    @imydou file_get_contents 有其它设置可以避免夯住。你可以把 curl 封装下呗,到时也需要一些 POST 请求需要 curl 处理的。
    explon
        7
    explon  
       Sep 23, 2015   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  
       Sep 27, 2018
    遇到了同样的问题,file_get_contents、fsocketopen、curl 三个都试了,都需要 10 秒钟。但是用浏览器访问秒开(同一主机)。用 fsocketopen 监控的时候发现在打开端口的时候就花掉了 9 秒钟,后续其实是很快的。为什么?
    Rimifon
        9
    Rimifon  
       Sep 27, 2018
    排除 DNS 问题,因为使用 fsocketopen 的时候直接使用 IP 地址也一样要 9 秒。而且只有访问这台服务器的时候后卡这么久,其他服务器正常。代码在本地主机上调试正常。有点感觉对方的服务器阻止了我们服务器的请求一样。但如果被阻止了,为什么浏览器又可以秒开呢?
    About     Help     Advertise     Blog     API     FAQ     Solana     1570 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 2610ms UTC 16:26 PVG 00:26 LAX 09:26 JFK 12:26
    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