Ankündigung

Einklappen
Keine Ankündigung bisher.

Datei download -> speichern schlägt fehl

Einklappen

Neue Werbung 2019

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

  • Datei download -> speichern schlägt fehl

    Hi,

    ich beabsichte eine Datei via PHP für ein Update zu downloaden,( und entpacken) und hatte curl verwendet um dies zu relisieren. Über einen anderen Testserver von mir gehts.
    Möchte ich dann den richtigen nutzen klappts nicht.
    Nun habe ich auch gelesen, dass curl Anfragen auch blockiert werden können.

    Oder gibt es auch andere Möglichkeiten als curl?

    Den Code verwende ich:
    PHP-Code:
     $ch curl_init("http://www.mysite.com/downloads/update.zip"); /* initialize curl handle */
    curl_setopt($chCURLOPT_USERAGENT"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3");
    curl_setopt($chCURLOPT_FOLLOWLOCATIONtrue); /* allow redirects */
    curl_setopt($chCURLOPT_RETURNTRANSFER,true);  /* return into a variable */
     
    curl_setopt($chCURLOPT_FILE$zieldatei);
    $zieldatei fopen("update.zip""w");
    curl_setopt($chCURLOPT_HEADER0);
    curl_setopt($chCURLOPT_TIMEOUT3600);
     
    curl_exec($ch);
       
    $aCURLinfo curl_getInfo$ch );
              
    $sAverageSpeedDownload curl_getInfo$chCURLINFO_SPEED_DOWNLOAD );
          echo 
    '<pre>';
      echo 
    'Average speed download == ' $sAverageSpeedDownload '<br>';
         echo 
    '<br>';
          
    $aCURLinfo curl_getInfo$ch );
        
    print_r$aCURLinfo );
          echo 
    '</pre>';
     
    fclose($zieldatei); 

    In der PHP Programmierung bin ich nicht ganz so sattelfest. Kann auch sein, dass mir ein Fehler passiert ist.

    Danke für eure Ideen und Hilfen schonmal.

  • #2
    Grenze mal den Fehler ein, was genau schlägt fehl (curl_aufruf, oder sendet der andere Server einen Fehler)?

    Mir kommt die Time Out-Zeile verdächitg vor, darf PHP überhaupt eine Stunde lang laufen?

    Hast du error_reporting auf E_ALL?

    Kommentar


    • #3
      Hi, habe ich nicht eingebaut.

      Kommentar


      • #4
        Dan mach es doch mal...

        Kommentar


        • #5
          Na damit habe ich wohl Pech. K.a. was mein Hoster da für Gründ sieht die display_errors, display_startup_errors auf Off zu setzen also funktionierte
          PHP-Code:
           error_reporting (E_ALL); 
          leider nicht

          EDIT:
          Wenns unüblich ist dies aus welchen Gründen auch immer auszuschalten, würde es sich lohnen den Hoster deswegen zu kontaktieren?

          Kommentar


          • #6
            Datei download -&gt; speichern schlägt fehl

            In Produktivumgebungen ist es üblich, Fehlermeldungen nicht anzuzeigen sondern nur zu loggen. Display_errors ist jedoch eine Direktive, die du mit ini_set() überschreiben kannst.

            Kommentar


            • #7
              Danke habs mir gerade gegoogelt wie geht und dies eingebracht:

              PHP-Code:
               ini_set('display_errors''1');
               
              error_reporting(E_ALL E_STRICT); 
              Ergebnis: Warning: curl_setopt(): supplied argument is not a valid File-Handle resource in /web/7/000/010/013/35784/htdocs/folder/vault/update.php on line 38

              Zeile 38 ist diese:
              PHP-Code:
              curl_setopt($chCURLOPT_FILE$zieldatei); 
              Was ist da unzulässig?

              Kommentar


              • #8
                Anzunehmender Weise ist $zieldatei ein String und keine StreamResource!
                Zumindest in dem Moment, denn fopen() verwendest Du erst danach...

                Kommentar


                • #9
                  Was muss ich dann ändern? ( bin noch nicht so fit in php )

                  Kommentar


                  • #10
                    Na komm schon, das muß man doch nicht vorkauen! Was denkst Du musst Du hier ändern?
                    PHP-Code:
                    curl_setopt($chCURLOPT_FILE$zieldatei);
                    $zieldatei fopen("update.zip""w"); 
                    kleiner Tipp: Du kannst ein Bild erst dann aufhängen, wenn es gemalt ist!

                    Kommentar


                    • #11
                      Ah ok, ich habe es umgedreht und es gab keine Fehler mehr.
                      PHP-Code:
                      $zieldatei fopen("update.zip""w");
                       
                      curl_setopt($chCURLOPT_FILE$zieldatei); 

                      Nur jetzt habe ich das Problem, dass die Datei, welche etwa 1MB sein müsste 77 Bytes hat.
                      Sprich irgendwas dennoch noch nicht ganz ok ist.

                      Kommentar


                      • #12
                        .zip mit fopen

                        Kommentar


                        • #13
                          Müsste das dann in der Art erfolgen?
                          PHP-Code:
                          <?php
                          $zip 
                          = new ZipArchive;
                          $res $zip->open('test.zip');
                          if (
                          $res === TRUE) {
                              echo 
                          'ok';
                              
                          $zip->extractTo('test');
                              
                          $zip->close();
                          } else {
                              echo 
                          'failed, code:' $res;
                          }
                          ?>
                          Habe es hier auf der Seite so gesehen: http://php.net/manual/en/ziparchive.open.php

                          Kommentar


                          • #14
                            Bin mir jetzt nicht sicher, ob ZipArchive :: open eine für CURLOPT_FILE gültige StreamResource zur Verfügung stellt.
                            Das müsstest Du dann testen...

                            Kommentar


                            • #15
                              Hm,... habe es nochmal umgestrickt.....

                              Ich fand ein Thema wo wer anders auch hatte.
                              PHP-Code:
                              set_time_limit(0); /*prevent timeout*/
                               
                              $ch2=curl_init("http://www.mysite.com/downloads/update.zip");
                              $file2 fopen('update.zip','w+');
                              curl_setopt($ch2CURLOPT_FILE$file2); //auto write to file

                              curl_setopt($ch2CURLOPT_TIMEOUT5040);
                              curl_setopt($ch2CURLOPT_POST1);
                              curl_exec($ch2);
                              curl_setopt($ch2CURLOPT_FOLLOWLOCATIONtrue);
                              curl_setopt($ch2CURLOPT_RETURNTRANSFERtrue);

                              if(
                              curl_exec($ch2) === false)
                              {
                                  echo 
                              'Curl error: ' curl_error($ch2);
                              }
                              else
                              {echo 
                              '<br>';
                                  echo 
                              'CURL : Operation completed without any errors';
                                  echo 
                              '<br>';
                              }

                              // Close handle


                              curl_close($ch2);

                              fclose($file2); 
                              Wars aber auch nicht. wget scheint auf dem Server leider nicht zur Verfügung zu stehen.
                              hatte die Fehlerausgabe von curl eingebracht. Bringt aber auch keine Fehler.
                              Laut curl ist alles tutti,- Dateigröße dennoch nur 77 Byte.

                              Kommentar

                              Lädt...
                              X