Problem mit Datei öffnen

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

  • Problem mit Datei öffnen

    Hallo,

    Ich bin heute die ganze Zeit an einem Problem, welches ich nicht gelöst bekomme.

    ich habe ein Downloadscript, mit dem ich Leuten Dateien verschiedenster Art anbiete. Unter anderem sind das PDF- und Word-Dateien. Allerdings gibt es damit ein Problem.
    Wenn man die Datei (beim Downloaddialog) öffnet, kommt bei jeder Datei z.B. PDF die Fehlermeldung, dass die Datei nicht existiere. Wenn man statt auf Öffnen auf Speichern klickt, und diese vom Rechner öffnet, dann funktioniert dies jedoch einwandfrei.

    Das ist der Codeausschnitt:
    PHP-Code:
      $filename    $row['download_filename'];
      
    $basedir      $_SERVER["DOCUMENT_ROOT"]."/downloads";
      
    $filename    sprintf("%s/%s"$basedir$filename);
      
    $save_as_name basename($filename);

      
    header("Content-Type: application/octet-stream");
      
    header("Content-Disposition: attachment; filename=\"$save_as_name\"");
      
    readfile($filename);
      exit; 

    Lasse ich mir die Variablen ausgeben, so erhalte ich dieses Ergebnis:

    $basedir => /home/*****/www/wb/www.*****.de/htdocs/downloads
    $filename => /home/*****/www/wb/www.*****.de/htdocs/downloads/Testtermine_WS_2007_.pdf
    $save_as_name => Testtermine_WS_2007_.pdf

    Die Datei ist in dem Ordner vorhanden und kann manuell geöffnet werden.
    Also wenn ich www.*****.de/downloads/Testtermine_WS_2007_.pdf aufrufe, dann klappt es auch. Warum kann ich mir nicht erklären.
    Die meiste Unwissenheit könnte besiegt werden. Wir eignen uns nur deshalb keine Kenntnisse an, weil wir sie nicht wünschen.

  • #2
    Kann es sein, dass er beim Öffnen-Dialog die Datei nochmal anfordert oder so und beim Speichern Unter Dialog einfach abspeichert?
    Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
    var_dump(), print_r(), debug_backtrace und echo.
    Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
    Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
    Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

    Kommentar


    • #3
      Tja, das ist mein Problem,
      ich habe einfach keine Ahnung... Habe sämtliche Fehlerquellen (bis auf die meine Wenigkeit) ausgeschlossen...


      Für Vorschläge immer offen


      Grüße

      David
      Die meiste Unwissenheit könnte besiegt werden. Wir eignen uns nur deshalb keine Kenntnisse an, weil wir sie nicht wünschen.

      Kommentar


      • #4
        Push


        Kann mir keiner Helfen?

        Eine ganze Schule leidet darunter
        Die meiste Unwissenheit könnte besiegt werden. Wir eignen uns nur deshalb keine Kenntnisse an, weil wir sie nicht wünschen.

        Kommentar


        • #5
          Ich würde dir mal empfehlen die header korrekt nach Datei zu setzen ?
          PHP-Code:
          //Für pdf
          header('Content-type: application/pdf');
          header('Content-Disposition: attachment; filename="downloaded.pdf"');
          readfile($datei);
          exit; 
          Funzt es jetzt zumindest für pdf's ?

          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
            Hi alle...

            Also ich habe jetzt folgendes getestet:


            $filename = $_SERVER["DOCUMENT_ROOT"]."/downloads/".$row['download_filename'];

            header('Content-type: application/pdf');
            header("Content-Disposition: attachment; filename=\"$filename\"");
            readfile($filename);
            exit;

            Es öffnet sich der Dialog. Wenn ich die Datei namens "index" vom Typ Adobe Acrobat Browser Dokument öffne, dann klappt dies auch.

            Das ist mir ein Rätsel....

            Nur beibehalten kann ich es nicht, da ich ja Dateien aller Art zum Download anbiete...

            Archive, pdf, .doc, Excel, Bilder usw...

            Woran kann das liegen?


            Viele Grüße

            David
            Die meiste Unwissenheit könnte besiegt werden. Wir eignen uns nur deshalb keine Kenntnisse an, weil wir sie nicht wünschen.

            Kommentar


            • #7
              Schau mal HIER die obersten beiden Einträge. Der Zweite ist der 1., also den zuerst lesen. Ich denke das ist genau dein Problem, oder?

              Demnach musst du einfach nur octet-stream zusammen schreiben als "octetstream" - am besten ne kleine "Browserweiche" einbauen
              Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
              var_dump(), print_r(), debug_backtrace und echo.
              Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
              Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
              Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

              Kommentar


              • #8
                Hallo Shurakai,

                ich habs jetzt mal in mehreren Varianten versucht. Leider vergeblich.
                So habe ich es gemacht.

                PHP-Code:
                   $row   mysql_fetch_row($query);
                   
                $file  $_SERVER["DOCUMENT_ROOT"]."/downloads/".$row['download_filename'];

                   
                $len filesize($file);
                   
                $filename basename($file);
                   
                $file_extension strtolower(substr(strrchr($filename,"."),1));

                   switch( 
                $file_extension ) {
                      case 
                "pdf"$ctype="application/pdf"; break;
                      case 
                "exe"$ctype="application/octet-stream"; break;
                      case 
                "zip"$ctype="application/zip"; break;
                      case 
                "doc"$ctype="application/msword"; break;
                      case 
                "xls"$ctype="application/vnd.ms-excel"; break;
                      case 
                "ppt"$ctype="application/vnd.ms-powerpoint"; break;
                      case 
                "gif"$ctype="image/gif"; break;
                      case 
                "png"$ctype="image/png"; break;
                      case 
                "jpeg":
                      case 
                "jpg"$ctype="image/jpg"; break;
                      case 
                "mp3"$ctype="audio/mpeg"; break;
                      case 
                "wav"$ctype="audio/x-wav"; break;
                      case 
                "mpeg":
                      case 
                "mpg":
                      case 
                "mpe"$ctype="video/mpeg"; break;
                      case 
                "mov"$ctype="video/quicktime"; break;
                      case 
                "avi"$ctype="video/x-msvideo"; break;
                      default:   
                $ctype="application/force-download";
                   }

                   
                header("Pragma: public");
                   
                header("Expires: 0");
                   
                header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
                   
                header("Cache-Control: public");
                   
                header("Content-Description: File Transfer");

                   
                header("Content-Type: $ctype");

                   
                $header="Content-Disposition: attachment; filename=".$filename.";";
                   
                header($header);
                   
                header("Content-Transfer-Encoding: binary");
                   
                header("Content-Length: ".$len);
                   @
                readfile($file);
                   exit; 

                So, nach dem Code ist nach wie vor der Download der Datei möglich, das direkte Öffnen jedoch immernoch nicht.

                Hier ist der Link zu meinem Problem:

                http://www.wbk-el.de/index.php?show=dates

                In den ersten beiden Einträgen sind PDF-Dateien, wo man es ausprobieren kann.

                Ich hoffe, dass mir jemand helfen kann, weil ich mittlerweile echt schon eine Krise bekomme.



                Viele Grüße

                David
                Die meiste Unwissenheit könnte besiegt werden. Wir eignen uns nur deshalb keine Kenntnisse an, weil wir sie nicht wünschen.

                Kommentar

                Lädt...
                X