500 Fehler während Download

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

  • 500 Fehler während Download

    Hallo,

    ich hebe folgendes Problem.

    Ich schreibe grad an einer Webseite wo man auch etwas downloaden kann.

    Per klick auf einen Link öffnet sich ein kleines PopUp in dem der Download startet.

    Sobald der Download startet, ist ein weiter surfen auf der Seite nicht möglich.
    Es gibt einen Error 500 - Internal server error

    Hat vielleicht jemand eine Ahnung woran das liegen könnte?
    Kann das eventuelle an falsche Servereinstellungen liegen?

    Gruß Nordin

  • #2
    Hi.

    Ohne Quellcode wird man da nichts sagen können - deine Angaben sind da viel zu wage.

    mfg streuner
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
    der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

    "Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"

    Kommentar


    • #3
      Folgender Code lädt die Datei herunter:

      PHP-Code:
      $file    $sourcedir."/ordner/datei.zip";
      $size    filesize($file);

      header("Content-Type: application/force-download"); 
      header("Content-Type: application/octet-stream");
      header("Content-Type: application/zip");
      header('Content-Length: '.$size);
      header('Content-Disposition: inline; filename="datei.zip"');
      header('Content-Transfer-Encoding: binary');
      header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
      header('Pragma: public');

      $bis 1024*1024;
      $count round($size/(int)$bis);
      $handle fopen ($file"r");    
          for (
      $i=0;$i<=$count;$i++) {
              
      $ftell ftell($handle)+$bis;
              
      $content fread ($handle$bis);
              
      fseek($handle,$ftell);
              echo 
      $content
          }
      fclose ($handle); 
      Mit fopen() arbeite ich weil es Dateien gibt die für den download scheinbar zu groß sind. Die Datei war vor der Nutzung mit fopen immer beschädigt. Seit dem ich fopen nehme kommt sie unbeschädigt an. könnte es am fopen liegen?
      Zuletzt geändert von Nordin; 17.05.2011, 14:53.

      Kommentar


      • #4
        @streuner
        Hast eine Vermutung woran es liegen könnte?

        Kommentar


        • #5
          Hi.

          Check mal:

          500 Internal Server Error - 500 Internal Server Error Message Displays in Browser Window - 500 Error
          How do I fix a ‘500 Internal Server Error’ on my website? Netfirms Support Center

          mfg streuner
          Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
          der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

          "Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"

          Kommentar


          • #6
            Ah ok, am logischsten scheint mir "PHP Coding Timing Out".

            Bei einer Datei mit ca. 200MB wird ja das fopen bzw. das fread immer und immer wieder ausgeführt bis es fertig ist. Aber das muss ja, da die Datei ja fertig geladen werden muss. Sobald die for-Schleife durchgelaufen und die Datei somit fertig heruntergeladen ist, funktioniert alles wieder.

            Also liegt es sicher auf der Hand das die for-Schleife schuld hat.
            Aber wie kann ich es lösen das es kein time out gibt?

            Kommentar


            • #7
              setze einfach

              PHP-Code:
              set_time_limit(0); 
              vor dem Code ... allerdings kannst du deine Schleife MASSIV kürzen

              ich verwende folgenden Code

              PHP-Code:
              $Dateiname basename($Datei);
              $Groesse filesize($Datei);
              $file=fopen($Datei,'r');
              set_time_limit(0);
              if (
              $file) {
                 
              header("Pragma: public");
                 
              header("Expires: 0");
                 
              header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
                 
              header("Cache-Control: private",false);
                 
              header("Content-Type: application/force-download");
                 
              header("Content-Type: application/octet-stream");
                 
              header("Content-Type: application/download");
                 
              header("Content-Disposition: attachment; filename=\"".$Dateiname."\";");
                 
              header("Content-Description: File Transfer");
                 
              header("Content-Transfer-Encoding: binary");
                 
              header('Content-Length: '.$Groesse );
                 
              flush();
                 while (!
              feof($file)) {
                    print(
              fread($file,4096));
                    
              flush();
                 }
              }
              fclose($file);
              die(); 
              [font=Verdana]
              Wer LESEN kann, ist klar im Vorteil!
              [/font]

              Kommentar


              • #8
                Hallo,

                vielen Dank erstmal für den Hinweis mit der Schleife. Habe es entsprechend angepasst.

                Auch das set_time_limit(0); habe ich eingefügt. Dennoch ist ein weiter surfen während des Downloads nicht möglich. nach 40 Sekunden kommt immernoch der 500 Fehler

                Kommentar


                • #9
                  hast du einen eigenen Server , oder lässt du es (free)hosten ? - nicht wenige Hoster verbieten den Zugriff auf das Time-limit ....(eigentlich sogar so gut wie alle, wenn du nicht gerade einen Root-Server angemietet hast)
                  [font=Verdana]
                  Wer LESEN kann, ist klar im Vorteil!
                  [/font]

                  Kommentar


                  • #10
                    Habe nen eigenen... kann also alternativ auch per htaccess was ändern.

                    Kommentar


                    • #11
                      Verwendest du Sessions ...?
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        Jap. Der User muss sich erst einloggen.

                        Kommentar


                        • #13
                          hmm .. ich nehm auch sessions - aber nen 500er beim Download hab ich noch nicht gesehn ...
                          [font=Verdana]
                          Wer LESEN kann, ist klar im Vorteil!
                          [/font]

                          Kommentar


                          • #14
                            Dann könnte es der übliche Fall sein, dass dein Downloads-Script über seine gesamte Laufzeit den Zugriff auf die Session-Datei sperrt, so dass alle anderen Scripte ("normales Weitersurfen") darauf nicht zugreifen können.

                            Probiere im Downloadscript die Session mit session_write_close zu schließen, sobald du mit der Überprüfung der Zugriffsberechtigung fertig bist, und bevor du den Dateiinhalt an den Client schickst.
                            I don't believe in rebirth. Actually, I never did in my whole lives.

                            Kommentar


                            • #15
                              --gelöscht--

                              //EDIT
                              Hat scheinbar funktioniert. Danke.
                              Zuletzt geändert von Nordin; 18.05.2011, 15:14.

                              Kommentar

                              Lädt...
                              X