Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] curl error 56 recv failure connection reset by peer

Einklappen

Neue Werbung 2019

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

  • [Erledigt] curl error 56 recv failure connection reset by peer

    Hallo zusammen,

    ich bin mittlerweile recht ratlos und google ist mir keine Hilfe (bzw. mit gehen die Ideen für die google Suche aus...)

    Undzwar habe ich das Problem das wenn ich Dateien per Curl lade und diese dann gleichzeitig an den Browser ausgeben lasse (also Download speichern Dialog). Nun habe ich das Problem, dass der Download bei Dateien die größer sind als 1Gb, der Download einfach abbricht. Es ist meistens ziemlich genau 1GB, +- ein paar Bytes.
    Es werden auch die Direktlinks auf die Dateien benutzt.

    Nun weiß ich echt nichtmehr woran das liegen kann...
    Am Anfang des Scripts überschreibe ich den timeout von php mit
    Code:
    set_time_limit(0);
    Auch
    Code:
    curl_setopt($this->ch, CURLOPT_CONNECTTIMEOUT ,0); 
    	  curl_setopt($this->ch, CURLOPT_TIMEOUT, 600); //timeout in seconds
    bringt keinen Unterschied.

    Woran kann das Problem liegen? Stehe wirklich auf dem Schlauch...

    Hoffe mir kann irgendjemand helfen!

    EDIT: Wenn ihr noch mehr Infos benötigt stelle ich diese gerne zur Verfügung!
    Gruß
    prophet


  • #2
    mitlerweile ratlos?
    was kannst du alles ausschliessen, denn es gibt ja massen an infos im netz.

    Kommentar


    • #3
      Ausschließen kann ich alles was mit Timeout zu tun hat.
      Dann bin ich noch über Netzwerk Probleme gestoßen. Das kann aber eigentlich nicht sein, da das ja nur bei Dateien kommt die größer als 1gb sind.

      Großartiges anderes habe ich nicht gefunden

      Kommentar


      • #4
        Ich vermute mal, du lädst die Datei in einem stück und schickst sie dann weiter? Da wird wohl der RAM voll sein oder PHP der Meinung sein, dass du übertreibst. Wirst wohl streamen müssen.
        Zitat von nikosch
        Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

        Kommentar


        • #5
          Da vermutest du richtig! Die Datei wird vom Server angefangen zu laden, aber gleich an den User weitergeschickt. Sprich das Script ist vor dem eigentlichen Download fertig, aber das spielt keine Rolle habe ich schon festgestellt!
          Ram habe ich überprüft, der Server hat 32gb und hat noch einiges an Reserven.
          Gibt es eine Möglichkeit PHP in dem Sinne zu überlisten?
          Und wie meinst du das mit streamen?

          Kommentar


          • #6
            Zeig mal bitte etwas mehr Code.
            Zitat von nikosch
            Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

            Kommentar


            • #7
              Gerne doch
              PHP-Code:
              $this->ch curl_init();
                      
              curl_setopt($this->chCURLOPT_URL$this->directdownloadlink);
                      
              curl_setopt($this->chCURLOPT_REFERER$this->originalurl);
                      
              curl_setopt($this->chCURLOPT_HEADERfalse);
                      
              curl_setopt($this->chCURLOPT_BINARYTRANSFERtrue);
                      
              curl_setopt($this->chCURLOPT_USERAGENT$this->useragent);
                      
              curl_setopt($this->chCURLOPT_FOLLOWLOCATIONFALSE);
                      
              curl_setopt($this->chCURLOPT_FORBID_REUSETRUE);
                      
              curl_setopt($this->chCURLOPT_FRESH_CONNECTTRUE);
                      
                      
              curl_setopt($this->chCURLOPT_HEADERFUNCTION$opt['CURL_HEADER_CALLBACK']);
                      
              curl_setopt($this->chCURLOPT_WRITEFUNCTION, array($this'myProgressFunc'));
                  
                      
              // Verbose 
                      
              curl_setopt ($this->chCURLOPT_VERBOSETRUE);
                      
              curl_setopt($this->chCURLOPT_STDERR$fp); 
                      
                      
              /* Führe curl aus */
                      
              curl_exec($this->ch); 
              Ich habe desweiteren gerade festgestellt, dass der Scriptpart lokal bei mir auf dem Rechner ohne Probleme weiterlädt. Ist das nun ein Scriptproblem oder ein Config Problem?

              Kommentar


              • #8
                Das Script wird ja wohl kaum einfach so abschmieren, ohne eine Meldung im Error-Log zu hinterlassen.
                Guck doch mal bei der (fehlerhaften) Datei, ob sich am Anfang oder am Ende eine Meldung von PHP eingeschlichen hat.
                Zitat von nikosch
                Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

                Kommentar


                • #9
                  Tuts auch nicht. Es kommen zwei verschiedene Meldungen.
                  Einmal in der Nginx error.log*39 readv() failed (104: Connection reset by peer) while reading upstream
                  und wenn ich curl verbose setzt, kommt 56 recv failure connection reset by peer

                  Das sind die einzigen Meldungen die ich bekomme

                  Kommentar


                  • #10
                    PHP-Code:
                    curl_setopt$chCURLOPT_PROGRESSFUNCTION'progressCallback' ); 
                    kannste ja zum debuggen nehmen.

                    nötigenfalls haste ja die zahl der erfogreich an den client gesendeten bytes um weiterzumachen. wird dann wieder ein RST gesendet?

                    machen das alle server, von denen du grössere packete willst?
                    ist da irgendwo ein proxy der stören könnte zwische?
                    kann es damit zusammenhängen, warum nicht?
                    http://stackoverflow.com/questions/1...-peer-php-curl

                    ein packet dump scheint irgendwann unausweichlich.

                    Kommentar


                    • #11
                      Habe es schon über die writefunction debugged (kommt im endeffekt das selbe raus).

                      Ja das machen alle und es ist irgendwie jetzt immer bei der gleichen Dateigröße 1.604.408 KB, kein byte mehr oder weniger. Ich vermute das es an irgendeiner config liegen muss, oder evt. an der curl version, weil das selbe script funktioniert lokal bei mir ohne probleme.... Achh kp, drecksteil xD

                      Ist kein Proxy dazwischen und über die Stackoverflow Seite bin ich auch schon gestoßen, ist aber nichts der Fall.

                      Was genau soll man da dumpen wenns immer an der gleichen Stelle abbricht?



                      EDIT:
                      Problem gelöst! Musste in der nginx config den Wert max_temp_file_size anpassen.

                      Kommentar

                      Lädt...
                      X