PHP Curl ab und zu timeout !

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHP Curl ab und zu timeout !

    Hallo zusammen,

    das ist mein erster beitrag. Ich hoffe das mir jemand helfen kann.

    Ich bin dabei eine API für meine HP zu erstellen. Damit ich dann nicht immer alles doppelt programmieren muss und dann mittels android auf die API zugreifen kann verwende ich innerhalb der PHP seite auch curl.

    nun kommt das Rätselhafte.

    ab und zu bekomme ich den korrekten rückgabewert den ich erwarte.

    Dann aber wieder einen timeout als würde er die url nicht finden.

    das ergibt für mich keinen sinn

    hier der Code (Denke aber nicht das der Helfen wird oder da ein Fehler drinnen ist.

    hier mal die Classe die ich geschrieben habe

    PHP-Code:
    class tt_sdk
    {
          var 
    $ch;
          var 
    $TT_APP_ID;
          var 
    $TT_API_KEY;
          var 
    $TT_API_VER;
          var 
    $TT_API_SERVER;
          var 
    $TT_URL;

           function 
    tt_sdk() {
              
    $this->TT_APP_ID "aus sicherheitsgründen entfernt";                  
              
    $this->TT_API_KEY "gleicher grund fürs löschen";
              
    $this->TT_API_SERVER 'http://beta.tuningtreffen.info';
              
    $this->TT_API_VER '1';
              
    $this->TT_URL $this->TT_API_SERVER.'/api/v'.$this->TT_API_VER.'/';
              
              
           }

        function 
    init($func) {
             
    $this->ch curl_init();
             
    curl_setopt($this->chCURLOPT_HTTPHEADER, array(
                  
    'Content-Type: application/json',
                  
    'X-Parse-Application-Id: '.$this->TT_APP_ID,
                  
    'X-Parse-REST-API-Key: '.$this->TT_API_KEY
             
    ));
             
    curl_setopt_array($this->ch, array(
               
    CURLOPT_RETURNTRANSFER => 1,
               
    CURLOPT_NOSIGNAL => 1,
               
    CURLOPT_URL => $this->TT_URL.''.$func,
               
    CURLOPT_USERAGENT => $_SERVER['HTTP_USER_AGENT'],
               
    CURLOPT_POST => 1,
               
    CURLOPT_CONTENT_TYPE => 'application/json'
             
    ));
            }

            function 
    post_data($data) {
             if (
    $_COOKIE['tt_token'] <> null) {       
                
    $data['auth_token'] = $_COOKIE['tt_token'];
              }         
              
    $dataString json_encode($data);
              
    curl_setopt($this->chCURLOPT_POSTFIELDS$dataString);
              
    curl_setopt($this->chCURLOPT_CONNECTTIMEOUT ,10); 
              
    curl_setopt($this->chCURLOPT_TIMEOUT10); 
              
    $response curl_exec($this->ch);
              if (
    $response === false) {
                echo 
    "fehler";
                
    $result['error']['curl'] = curl_error($this->ch);
                
    $result['error']['url'] = curl_getinfo($this->chCURLINFO_EFFECTIVE_URL);
              }
              
    $res_code curl_getinfo($this->chCURLINFO_HTTP_CODE);
              
    $result['error']['url'] = curl_getinfo($this->chCURLINFO_EFFECTIVE_URL);
              
    curl_close($this->ch);
              
    $result['error']['code'] = $res_code;

              
    $result['response'] = json_decode($response,true);
              return 
    $result;
            }

    wie gesagt ab und zu bekomme ich das gewünschte ergebnis und ab und zu gibt es n timout das mir dann der $res_code = 0 ausgibt.

    wie in gottes namen kann das sein ?

    gruss Sascha

  • #2
    Problem erkannt, Problem gebannt !

    Also !

    Der fehler war nicht das curl die URL nicht gefunden hatte sondern das ich die session_id an das CURL script mit übergeben habe !

    da aber 2 scripts nicht gleichzeitig auf die SESSION daten zugreifen dürfen (was aber in meinem fall notwendig war) und die daten schreibgeschützt waren hat sich der CURL aufruf aufgehängt.

    nun zu meiner Frage warum es mal ging und mal nicht.

    wenn ich mich mit den fb daten eingeloggt hatte gab es keine fehlermeldung da die session nicht übergeben wurde. (warum auch immer) auf jeden fall hat das script dann eine neue session geschrieben und ich bekam nur die antwort das der TOKEN nicht gefunden wurde.

    Logisch....

    jetzt wie hab ich das gelöst ?

    in dem Jeweiligen script was mittels CURL aufgerufen wird am ende der datei folgende zeile eingefugt :
    PHP-Code:
    session_write_close(); 
    allerdings musste ich das auch in meiner SDK einbauen :

    PHP-Code:
        function init($func) {
             
    session_write_close();
             
    $this->ch curl_init();
             
    curl_setopt($this->chCURLOPT_HTTPHEADER, array(
                  
    'Content-Type: application/json',
                  
    'X-Parse-Application-Id: '.$this->TT_APP_ID,
                  
    'X-Parse-REST-API-Key: '.$this->TT_API_KEY
             
    ));
             
             
    curl_setopt_array($this->ch, array(
               
    CURLOPT_RETURNTRANSFER => 1,
               
    CURLOPT_NOSIGNAL => 1,
               
    CURLOPT_URL => $this->TT_URL.''.$func,
               
    CURLOPT_USERAGENT => $_SERVER['HTTP_USER_AGENT'],
               
    CURLOPT_POST => 1,
               
    CURLOPT_CONTENT_TYPE => 'application/json'
             
    ));
            }

            function 
    post_data($data) {       
              
    $dataString json_encode($data);
              
    curl_setopt($this->chCURLOPT_POSTFIELDS$dataString);
              
    curl_setopt($this->chCURLOPT_CONNECTTIMEOUT ,10); 
              
    curl_setopt($this->chCURLOPT_TIMEOUT10); 
              
    $response curl_exec($this->ch);
              if (
    $response === false) {
                
    $result['error']['curl'] = curl_error($this->ch);
                
    $result['error']['url'] = curl_getinfo($this->chCURLINFO_EFFECTIVE_URL);
              }
              
    $res_code curl_getinfo($this->chCURLINFO_HTTP_CODE);
              
    $result['error']['url'] = curl_getinfo($this->chCURLINFO_EFFECTIVE_URL);
              
    curl_close($this->ch);
              
    $result['error']['code'] = $res_code;
              
    $result['error']['Message'] = 'Fehler !';
              
    session_start();
              
    $result['response'] = json_decode($response,true);
              return 
    $result;
            } 
    nachdem dann curl abgeschlossen wurde habe ich die session mit "session_start()" wieder schreibfähig gemacht.

    und alle probleme waren gelöst.

    sollte da ein Profi evtl etwas zu verbessern haben bin ich gerne bereit dieses zu berücksichtigen !

    gruss sascha

    Kommentar

    Lädt...
    X