在linode服务器上重新缓慢

时间:2016-07-31 11:47:22

标签: php recaptcha

我使用以下PHP来验证google recaptcha:

function checkCapcha($ response,$ ip){

        try {


            $url = 'https://www.google.com/recaptcha/api/siteverify';
            $data = ['secret'   => $secret,
                     'response' => $response,
                     'remoteip' => $ip];

            $options = [
                'http' => [
                    'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
                    'method'  => 'POST',
                    'content' => http_build_query($data) 
                ]
            ];

            $context  = stream_context_create($options);
            $result = file_get_contents($url, false, $context);
            //return json_decode($result)->success;
             //echo $result;
            if(json_decode($result)->success){
                return true;
            }else{
                return false;
            }
        }
        catch (Exception $e) {
            return null;
        }

}

它可以在我的家庭服务器上完美运行,但是当我在我的linode上使用相同的代码时,需要很长时间才能返回结果。结果是正确的,但大约需要3分钟。

有人可以提供建议吗。

提前致谢

2 个答案:

答案 0 :(得分:0)

我有同样的问题。平均需要2000毫秒才能从Google API获得响应。

问题是,如果我使用curl,那就太慢了。如果我切换回普通file_get_contents功能,它的工作速度会更快(即正常时间)。

现在,当我认为curl可能是罪魁祸首时,并不像我定位另一个HTTPS API那样,它可以快速完美地工作。

curl花99%的时间等待Google API回复内容,即[starttransfer_time] => 2.332313

这真的很奇怪。

所以解决方案是在这个用例中避免使用curl并切换到file_get_contents,即使它不是罪魁祸首!

答案 1 :(得分:0)

我使用Centos 7,我遇到了同样的问题。

首先添加www.google.com /etc/hosts记录(如果这可以解决您的问题),而不是关闭服务器上的IPV6。

  1. /etc/sysctl.conf

    中添加以下行
    net.ipv6.conf.all.disable_ipv6 = 1
    net.ipv6.conf.default.disable_ipv6 = 1
    
  2. 要使设置生效,请执行:

    sysctl -p