readfile() + quicktime File

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

  • readfile() + quicktime File

    Hallo Gemeinschaft

    ich hoffe jemand kann mir bei diesem etwas komischen Problem helfen. Ich möchte verschiedene Files via Script zum Download anbieten. Das Script funzt mit allen Files bis auf das eine Quicktime File.
    PHP-Code:
    header("Content-type: application/octet-stream");
    header('Content-Disposition: attachment; filename="SimpleFears.mov"');
    readfile("Downloads/simplefears.mov"); 
    Bei den Headern habe ich auch 'video/quicktime' und 'application/mov' probiert, doch der Browser meldet, dass das Dokument keine Daten enthält. Das merkwürdige (zumindest für mich) ist, dass wenn ich einen falschen Pfad zum File angebe, ein mov File heruntergeladen wird. Doch ist dieses viel zu klein und wenn man die Endung auf .txt ändert, dann enthält es nur die Fehlermeldung, dass das File nicht gefunden wurde. Imho müsste doch die Fehlermeldung im Browser ausgegeben werden
    Das ErrorReporting ist auf E_ALL.
    Auch dieses kleine Testscript gibt mir für $temp false aus. Das File liegt aber 100% genau dort wo es sein sollte. Denn die anderen Files aus dem gleichen Verzeichnis funzen
    PHP-Code:
    $temp '';
    header("Content-type: application/octet-stream");
    header('Content-Disposition: attachment; filename="SimpleFears.mov"');
    $temp readfile("simplefears.mov");
    var_dump($temp); 
    Ich hoffe es hat jemand einen Tip für mich.

    Gruss

    tobi
    Zuletzt geändert von jahlives; 04.10.2005, 11:49.
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

  • #2
    Das merkwürdige (zumindest für mich) ist, dass wenn ich einen falschen Pfad zum File angebe, ein mov File heruntergeladen wird. Doch ist dieses viel zu klein und wenn man die Endung auf .txt ändert, dann enthält es nur die Fehlermeldung, dass das File nicht gefunden wurde. Imho müsste doch die Fehlermeldung im Browser ausgegeben werden
    Das verhalten ist vollkommen richtig. Schließlich erfolgt gar keine Ausgabe an den Browser, da du ja den Quicktimeheader sendest. Sofern dieser denn korrekt ist.

    Lass den Header mal weg, und probiere mit einem korrekten Pfad, was dann passiert.

    Kommentar


    • #3
      Hoi TobiaZ

      ich habe probehalber mal alles weggelassen was mit headern zu tun hatte und nur den readfile() drinngelassen.
      Nun motzt der Browser, dass das Dokument keine Daten enthält. Der Pfad ist definitiv richtig, denn zur Kotrolle habe ich noch eine Bedingung gemacht mit file_exists(). Und das Script erhält true zurück (also muss der Pfad resp der Filename korrekt sein)

      Kann es sein, dass es allenfalls etwas mit der Grösse des Files zu tun haben könnte (ca 180 Mb gross) ?

      Danke für deine Hilfe und Gruss

      tobi
      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

      Kommentar


      • #4
        In den User Contributed Notes zu Readfile findet sich Erhellendes: Zum Einen ist readfile() recht langsam im Vergleich zum klassischen fopen/fread, zum Anderen berichten viele vom gleichen Problem wie Du. Lösungsansätze gibts dort.

        Kommentar


        • #5
          Pekka you're the best
          Nun funzt es ohne Probs

          Gruss

          tobi
          Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

          [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
          Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

          Kommentar


          • #6
            Noch ne kleine Ergänzung:
            Das File wurde nur bis 105 Mb runtergeladen. Erst mit dem Setzen des MemoryLimits(php.ini) auf 180 Mb gings dann glatt.

            Gruss

            tobi
            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

            Kommentar


            • #7
              Noch ne kleine Frage:
              Die Fkt die ich nun verwende(von php.net abgekupfert) liest ja innerhalb einer while Schleife einen bestimmten Teil des Files ein. Bei jedem Durchlauf wird das Ergebnis jeweils mit echo() ausgegben.
              Wie kann es denn sein, dass ich mit so einer Methode ein Speicherproblem kriege ?
              PHP-Code:
              ...
              while (!
              feof($handle)) {
                     
              $buffer fread($handle$chunksize);
                     echo 
              $buffer;
                     if (
              $retbytes) {
                         
              $cnt += strlen($buffer);
                     }
                 }
              ... 
              Die Var $buffer wird ja jedesmal neu gesetzt. Wie kommt denn es dann, dass mir der Speicher trotzdem volläuft ?

              Gruss

              tobi
              Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

              [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
              Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

              Kommentar


              • #8
                Original geschrieben von jahlives
                Bei jedem Durchlauf wird das Ergebnis jeweils mit echo() ausgegben.
                Wie kann es denn sein, dass ich mit so einer Methode ein Speicherproblem kriege ?
                Nachdenken: Wo landen Ausgaben, die du mit echo machst, denn zunächst?
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  Wo landen Ausgaben, die du mit echo machst, denn zunächst?
                  Eigentlich bin ich davon ausgegangen, dass diese direkt an den Browser gesandt werden, ohne ein internes Buffering. Aber wenn du mich so fragst, dann muss wohl noch igendwo intern gepuffert werden.
                  Aber eigentlich habe ich gemeint, dass man dies explizit machen müsse ob_start() & Co

                  Gruss

                  tobi
                  Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                  [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                  Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                  Kommentar


                  • #10
                    Heute schon geflushed?
                    Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                    Schön - etwas Geschichte kann ja nicht schaden.
                    Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                    Kommentar


                    • #11
                      Original geschrieben von jahlives
                      ...
                      ohne ein internes Buffering. Aber wenn du mich so fragst, dann muss wohl noch igendwo intern gepuffert werden.
                      Aber eigentlich habe ich gemeint, dass man dies explizit machen müsse ob_start() & Co

                      Gruss

                      tobi

                      Ohne internes Puffering wäre ja http://de2.php.net/flush ohne Sinn un zweck. Der interne Puffer wird erst nach dem vollständigen Parsen der Php Dateien an den Browser versant. (so viel ich weis.)

                      gruss
                      lukasS

                      //edit:
                      Quetschi war wohl etwas eher ..

                      Kommentar


                      • #12
                        Dann sorgt also flush() dafür, dass der interne Puffer geleert wird ?? Ich habe in meinem Script mal nach jedem echo in der Schleife ein flush() eingebaut. Im Taskmanager sieht man keine Veränderung bei der Speichernutzung. Es werden immer zwischen 60-70 Mb verwendet.

                        Wie auch immer, danke für Eure "Aufklärung". Man lernt hier im Forum wirklich nie aus

                        Gruss

                        tobi
                        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                        Kommentar


                        • #13
                          Belegt PHP den Speicher, oder der Webserver?
                          Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                          Schön - etwas Geschichte kann ja nicht schaden.
                          Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                          Kommentar

                          Lädt...
                          X