2016-07-31 15 views
1

ich folgende PHP bin mit dem Google recaptcha zu überprüfen:recaptcha sehr langsam auf linode Server

Funktion 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; 
     } 

} 

Es funktioniert perfekt von meinem Home-Server, Aber wenn ich denselben Code auf meiner Linode verwende, dauert es ewig, bis ich mit einem Ergebnis zurückkomme. Das Ergebnis ist korrekt, aber es dauert ungefähr 3 Minuten.

Kann jemand bitte beraten.

Vielen Dank im Voraus

+0

Haben Sie den Vorgang abgelaufen? Sie können nach der Hilfe Ihres Hostinganbieters fragen, wenn es sich um ein langsames Netzwerk handelt. – frz3993

+0

Hallo, Danke für die Antwort. Ich bin mir nicht sicher, ob ich dich vollständig verstehe. Die Operation dauert 2,8 Minuten, von denen fast die gesamte Wartezeit (TTFB) ist. Ich habe auch die Serververbindungsgeschwindigkeit getestet, die über 750 Mbit/s liegt. (speedtest.net) habe ich auch den "www.google.com" -Teil in die Google-IP-Adresse geändert, um nach DNS-Problemen zu suchen. Auf meinem Heimserver mit _slow internet_ ist die Wartezeit 400ms. – mrmin24

Antwort

0

Ich habe das gleiche Problem. Es dauert im Durchschnitt 2000 ms, bis die Antwort vom Google API zurückgegeben wird.

Die Sache ist, wenn ich curl verwende, ist es so langsam. Wenn ich zurück in die einfache file_get_contents Funktion umschalte, funktioniert es viel schneller (d. H. Normales Timing).

Jetzt, wo ich dachte, die curl könnte der Übeltäter sein, ist es nicht so, wenn ich eine andere HTTPS API anvisiere, funktioniert es makellos schnell.

curl verbringt 99% der Zeit für Google-API wartet mit einem Gehalt zu reagieren zurück, das heißt [starttransfer_time] => 2.332313

Es ist wirklich seltsam.

Also die Lösung wäre curl in diesem Anwendungsfall zu vermeiden und zu file_get_contents wechseln, auch wenn es NICHT der Schuldige ist!

0

Ich benutze Centos 7, ich hatte das gleiche Problem.

Fügen Sie zunächst einen www.google.com/etc/hosts Datensatz, wenn dies Ihr Problem löst, als IPV6 auf Ihrem Server auszuschalten.

  1. Anfügen unten Linien in /etc/sysctl.conf:

    net.ipv6.conf.all.disable_ipv6 = 1 
    net.ipv6.conf.default.disable_ipv6 = 1 
    
  2. Um die Einstellungen affektive zu machen, führen:

    sysctl -p