PHP cURL timeout?!

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • PHP cURL timeout?!

    hallo liebe gemeinde
    ich habe ein kleines problem, wofür mir irgendwie die lösung nicht einleuchten mag.
    und zwar:
    ich setze jeweils in einer schleife so um die 100 http requests ab, der request übergibt den returned transfer an eine variable, die einigen zeichen entfernt und anschliessend mittels sql in eine datenbank geschrieben wird.

    es geht dabei darum, ein system zu entwickeln, womit ich lokal von meinem remote server einige daten auslesen kann und sozusagen ein "backup" wichtiger daten zu erhalten.
    klar kann man es anders lösen, darum geht es mir aber nicht.

    das problem ist nur, dass irgendwie manche requests einfach so untergehen. falls bei einem request was falsch laeuft sollte ja false zurückgegeben werden, wird aber nicht, das ganze geht einfach unter.
    habe je eine ausgabe if(request true) print "request nummer x erfolgreich"

    sieht dann meisten so aus: erfolgreich-> 1,2,3,4 plötzlich 8, 9,10,11,12,15

    ich denke ihr wisst was gemeint ist
    ich habe die manual mal gelesen, allerdings habe ich keine schlüssige antwort.
    ich habe als "lösungsversuch" mal probiert, einen sleep einzubauen. nach jedem request wird jetzt 2 sekunden geschlafen.

    danke für jede hilfe

  • #2
    Originally posted by svr View Post
    habe je eine ausgabe if(request true) print "request nummer x erfolgreich"

    sieht dann meisten so aus: erfolgreich-> 1,2,3,4 plötzlich 8, 9,10,11,12,15
    Wie auch immer diese eher obskure Abfrage in der Realität aussehen mag - wenn du nur den positiv-Fall behandelst und den Fehlerfall nicht, dann brauchst du dich auch nicht wundern, wenn fehlerhaft verlaufene Requests „einfach so untergehen“.

    Wie sieht denn deine Fehlerbehandlung aus, was fragst du ab und wie behandelst du es?
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Comment


    • #3
      ich geben voll und ganz zu, dass ich den eintrag hier haette schoener gestalten koennen

      das ganze sieht natürlich so aus:

      if(curl_request) print "erfolgreich";
      if(!curl_request) print "nicht erfogreich"; // php-manual: curl gibt im fehlerfall false zurück

      trotzdem wird eben nicht dieses "nicht erfolgreich" ausgegeben, niemals.

      Comment


      • #4
        Originally posted by svr View Post
        trotzdem wird eben nicht dieses "nicht erfolgreich" ausgegeben, niemals.
        Vielleicht waren alle Requests „erfolgreich“ (im Sinne von HTTP) - aber die Gegenstelle hat nicht das geliefert, was du erwartet hast. Hast du das überprüft ...?


        Du wirst schon mehr Infos - brauchbare Infos - liefern müssen, wenn du Hilfe bei deinem Problem bekommen willst.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Comment


        • #5
          hallo,
          also als erstes werde ich mal die curls posten
          sieht so aus

          PHP Code:
                      $ch curl_init(); 
                      
          curl_setopt($chCURLOPT_URL$urlcurrent); 
                      
          curl_setopt($chCURLOPT_HEADER1);
                      
          curl_setopt($chCURLOPT_USERAGENT$this->user_agent); 
                      
          curl_setopt($chCURLOPT_RETURNTRANSFER1);
                      
          curl_setopt($chCURLOPT_TIMEOUT$this->timeout);
                      
          curl_setopt($chCURLOPT_COOKIEJAR,'c.txt');
                      
          curl_setopt($chCURLOPT_COOKIEFILE,'c.txt');
                      
          curl_setopt($chCURLOPT_FRESH_CONNECT1); 
                      
          curl_setopt($chCURLOPT_FORBID_REUSE1); 
                      
          curl_setopt($chCURLOPT_FOLLOWLOCATION1);
                       
                      
          $string curl_exec($ch);

                      if(!
          $string){
                          print 
          "false";
                          
          remission();
                      } 
          als erstes fuehre ich in der schleife jeweils die requests aus, speichere das ganze in $string. danach wird uberprüft, was string zurückgibt, bei false sollte die funktion remission, die das ganze mit derselben url wiederholt, gerufen werden.

          im positiven fall wird der string weiterverarbeitet

          wie meinst du das mit "im sinne von http"
          wenn ein fehler auftritt sollte false zurückgegeben werden, falls alles glatt geht sollt mein stirng daten enthalten, wenigstens irgendwas
          ode rnicht?

          danke!
          Last edited by svr; 24-06-2010, 19:29.

          Comment


          • #6
            Originally posted by svr View Post
            wenn ein fehler auftritt sollte false zurückgegeben werden,
            Prüfst du auf false? Nein.

            falls alles glatt geht sollt mein stirng daten enthalten, wenigstens irgendwas ode rnicht?
            Genau das herauszufinden, riet ich dir bereits.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Comment


            • #7
              Originally posted by wahsaga View Post
              Prüfst du auf false? Nein.
              ..!$string...
              prüft das etwa nicht?

              Originally posted by wahsaga View Post
              Genau das herauszufinden, riet ich dir bereits.
              falls ein string daten enthält sehe ich es, dnen ich geben curl infos uber datengroesse transferzeit etc aus, plus substring.

              auf der kommandozeile natürlich. dann muesste ich doch wenigstens sehen, ob die entsprechende nummer leer ist.
              es kommt aber gar kein output!
              substring plus das andere zeug habe ich ja nicht zum spass gemacht, es ist also nicht so, dass ich es nicht versucht hätte.

              Comment


              • #8
                öhm .-. auch wenn das Amica und die annern hier vielleicht schöner erklären

                if (!$String) prüft nicht auf FALSE - , es prüft ob die Variable überhaupt existiert - die funktion antwortet jedoch bei Verbindungsfehler mit FALSE . das dann in der Variablen drinsteht ... sie existiert also

                correctamente sollte das wohl eher
                Code:
                if ($String === FALSE ) {
                   echo "mecker HTTP-request keine Antwort <br>";
                }
                else {
                ....
                tu halt was du machen wolltest, wenn die Anfrage erfolgreich war 
                }
                Last edited by eagle275; 24-06-2010, 21:36.
                [font=Verdana]
                Wer LESEN kann, ist klar im Vorteil!
                [/font]

                Comment


                • #9
                  !$var ergibt immer dann true, wenn für $var eine der folgenden Bedingungen zutrifft:
                  • $var ist undefiniert (vorher kommt eine Notice)
                  • $var ist null
                  • $var ist false
                  • $var ist 0
                  • $var ist ein leerer String
                  • $var ist ein String der nur die Ziffer 0 enthält, z. B. '0' oder "0"
                  • $var ist ein leeres Array


                  Im Grunde genommen wird der Wert erst zu int und danach zu bool gecastet. Das Ergebnis wird schließlich negiert (vgl. empty()).
                  [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                  Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                  Super, danke!
                  [/COLOR]

                  Comment


                  • #10
                    super erklärung, danke
                    mache mich ans werk und schaue ob alles klar geht

                    Comment


                    • #11
                      hi,
                      muss noch einmal fragen

                      habe jetzt das ganze so gelöst if($string === FALSE){remission();}else{save();}

                      das funktioniert schon ganz gut, nur leider verschwinden manche requests immernoch.
                      habe eine statistik gemacht, so in etwa 5-10% sind einfach weg.

                      hat jemand einen rat?
                      danke

                      Comment


                      • #12
                        Wie sieht dein aktueller Code aus?

                        Comment


                        • #13
                          PHP Code:
                          while($int<$absoluteAnzahl){
                                      
                          $int++;
                                      
                          // hier wird die url generiert ->$u_curl
                                  
                                      
                          $ch curl_init(); 
                                      
                          curl_setopt($chCURLOPT_URL$u_cur); 
                                      
                          curl_setopt($chCURLOPT_HEADER1);
                                      
                          curl_setopt($chCURLOPT_USERAGENT$this->user_agent); 
                                      
                          curl_setopt($chCURLOPT_RETURNTRANSFER1);
                                      
                          curl_setopt($chCURLOPT_TIMEOUT$this->timeout);
                                      
                          curl_setopt($chCURLOPT_COOKIEJAR,$this->cookie_file);
                                      
                          curl_setopt($chCURLOPT_COOKIEFILE,$this->cookie_file);
                                      
                          curl_setopt($chCURLOPT_FRESH_CONNECT1); 
                                      
                          curl_setopt($chCURLOPT_FORBID_REUSE1); 
                                      
                          curl_setopt($chCURLOPT_FOLLOWLOCATION1);
                                      
                          $string curl_exec($ch);

                                      if(
                          $string === FALSE){
                          print 
                          "error";
                                       
                          remission(); //die funktion ruft das ganze nochmal auf
                                      
                          }
                                      else{
                          verarbeiten(); // hier wird weiter verarbeitet
                                            
                          }
                                          
                                         
                                          
                          usleep($this->sleep);
                                          
                                          
                          curl_close($ch); 
                                      } 
                          sorry für die schlechte formatierung

                          Comment


                          • #14
                            keiner mehr??

                            Comment


                            • #15
                              Originally posted by svr View Post
                              keiner mehr??
                              OffTopic:
                              Du weißt, was um 16 Uhr passiert? Schau mal in deine Fehrnsehzeitung.


                              Peter
                              Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                              Meine Seite

                              Comment

                              Working...
                              X