Ankündigung

Einklappen
Keine Ankündigung bisher.

PDF-Datei von Festplatte lesen und im Browser öffnen

Einklappen

Neue Werbung 2019

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

  • PDF-Datei von Festplatte lesen und im Browser öffnen

    Hallo zusammen,

    ich möchte mittels PHP PDF-Dateien, die in einem geschützten Bereich des Webservers liegen, auslesen und im Browser öffnen.

    Ich habe es auf zweierlei Wegen versucht:

    -----------------------------------------

    Variante 1:

    PHP-Code:
     
    header
    ("Content-Type: application/pdf");
    $var_filefullpath "C:\reports\test.pdf";
    $var_fileobject fopen($var_filefullpath"rb");
     
    if(
    $var_fileobject)
    {
       
    $var_buffer fread($var_fileobjectfilesize($var_filefullpath));
       echo 
    $var_buffer;
       
    fclose($var_fileobject);

    -----------------------------------------

    Variante 2:

    PHP-Code:
     
    header
    ("Content-Type: application/pdf");
    readfile("C:\reports\test.pdf"); 
    -----------------------------------------

    Bei beiden Varianten habe ich desöfteren das Problem, dass bei diversen PDF-Dateien der Browser den "Auslesevorgang" abbricht. Ich bekomme dann vom IE folgende Meldung:

    "Die Navigation zu der Webseite wurde abgebrochen.
    Mögliche Vorgehensweise:
    Aktualisieren Sie die Seite."

    Klicke ich auf "Aktualisieren Sie die Seite.", zeigt er die PDF-Datei an.
    Nun würde mich interessieren: Liegt es evtl. an der Dateigröße? Gibt es bei den beiden o.g. Varianten irgendwelche Optionen oder Tricks? Oder gibt es eine dritte Variante?

    Bitte keine sinnlosen Kommentare bezgl. Browser. Der IE muss funktionieren!

    Gruß

    Thomas

  • #2
    Wie viele Tonnen wiegt denn die PDF-Datei?

    Kommentar


    • #3
      deine Header sind nicht ausreichend - jedenfalls für den Internet-Explorer

      PHP-Code:
      function helpdisplay() {
         
      $Datei='./pdfs/Handbuch_V0.5.pdf';
         if (
      file_exists($Datei)) {
            
      $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/pdf");
               
      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();
         }

      mal so als Beispiel-Code für mein Handbuch .

      Für dich müsstest du wohl aus dem "attachment" ein "inline" machen

      Kommentar


      • #4
        Hallo ChristianK, Hallo eagle275,

        erst einmal Danke für Eure Beiträge.

        Die PDF-Dateien erstelle ich selbst - mit PHP und mpdf.
        Die Dateien sind aber einwandfrei in Ordnung.

        Beim Generieren im PHP-Code tritt kein Fehler auf. Das mache ich übrigens an einer ganz anderen Stelle im Programm, ist auch ein ganz anderes Script. Und ich bekomme beim normalen Öffnen von der Festplatte vom Reader auch keinen Fehler gemeldet.

        Die Dateigröße ist an sich lächerlich, deswegen würde es mich auch wundern, wenn es daran läge.

        Versuche es jetzt mal mit den Headern von eagle275.

        Gruß

        Thomas

        Kommentar


        • #5
          Lesen von PDF-Datei per PHP funktioniert nicht, Browserfenster schließt sich

          Hallo zusammen,

          ich habe nach wie vor das Problem, das das Lesen einer PDF-Datei von der Serverfestplatte fehlschlägt. Das Browserfenster schließt sich einfach. Die PDF-Datei ist def. vorhanden und in 1a-Zustand.

          Hier mein PHP-Code:

          PHP-Code:
          session_start();

          set_time_limit(500000);

          $var_filefullpath $_SESSION["var_maxmustermann_commercialpaperlieferungengruppe"];
          //
          if(file_exists($var_filefullpath))
          {
              
          $var_filename basename($var_filefullpath);
              
          //
              
          $var_filesize filesize($var_filefullpath);
              
          //
              
          $var_fileobject fopen($var_filefullpath,'r');
              
          //
              
          if($var_fileobject)
              {
                  
          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/pdf");
                  
          header("Content-Disposition: inline; filename=\""$var_filename "\";");
                  
          header("Content-Description: File Transfer");
                  
          header("Content-Transfer-Encoding: binary");
                  
          header("Content-Length: " $var_filesize);
                  
          //
                  
          flush();
                  
          //
                  
          while(!feof($var_fileobject))
                  {
                      print(
          fread($var_fileobject4096));
                      
          //
                      
          flush();
                  }
              }
              else
              {
                  echo(
          "1");
              }
              
          //
              
          fclose($var_fileobject);
              
          //
              //die();
          }
          else
          {
              echo(
          "2");

          Kann mir jemand helfen? Ich würde gerne verstehen, was da falsch läuft.

          Gruß

          Thomas

          Kommentar


          • #6
            \r und \t sind Sonderzeichen, die Pfadangabe muss schon Sinn machen. Benutz dafür am Besten den Vorwärtsslash /, der funktioniert auch unter Windows. Dir muss aber der Unterschied zwischen Client und Server klar sein. Beide sind nur zufällig auf deinem Rechner wo du entwickelst dieselben.

            Kommentar


            • #7
              Das Browserfenster schließt sich einfach.
              Bitte was?

              Kommentar


              • #8
                Zitat von mquadrat Beitrag anzeigen
                Bitte was?
                Hallo mquadrat,

                Du hörst richtig !!! Das Browserfenster schließt sich ohne mein Dazutun !!! Deshalb poste ich ja hier diesen Beitrag.

                Die PDF-Datei liegt auf dem Server, da wo ich sie suche und sie ist 1a in Ordnung.

                Ca. jedes dritte Mal wird sie im Browser geöffnet (mit Adobe), die anderen 2 mal schließt sich das Browserfenster von selbst. Wenn ich nur wüsste, weshalb! Der PHP-Code, den ich oben gepostet habe, muss irgendeinen Fehler haben?!?

                Wenn Du den Code durchliest, fällt Dir irgendetwas ein, was es sein könnte?

                Gruß

                Thomas

                Kommentar


                • #9
                  ebenfalls Probleme mit PDF

                  Hallo Leute,

                  ich möchte dieses Thema noch einmal hervorkramen, da ich als PHP-Neu-/Quereinsteiger ebenfalls Probleme mit dem Einbinden von PDF-Dateien habe.

                  Ausgangsbasis:
                  In die index.php wird das ganze optische Setup der Website wie auch der Content includiert.

                  Die einzelnen Seiteninhalte werden aus einem inc-Verzeichnis includiert (include("...") => in Adresszeile des Browsers: index.php?site=...)

                  Ich möchte nun eine PDF-Datei direkt im Content-Breich anzeigen lassen, so dass der Besucher die Datei sowohl lesen als auch speichern/downloaden kann (klar, Anzeige/speichern je nach dessen Browsereinstellung).

                  Da ich leider (fast) keine Ahnung vom "Programmieren" von Scripten habe, muß ich auf fertige Scripte zurückgreifen, die ich dann auf meine Bedürfnisse anpasse.

                  Bisherige Versuche:

                  PDF mit <object> einbinden:
                  Das Objekt legt sich im Content in den obersten z-index, so dass Untermenüs unter das PDF-Dokument ausklappen. Außerdem stören die häßlichen dunkelgrauen Ränder um das PDF-Dokument.
                  Versuche, die PDF per z-index in untere Levels zu zwingen sind fehlgeschlagen.

                  i-frames wollte ich nach Möglichkeit vermeiden...


                  PHP-Code:
                  header("Content-Type: application/pdf");
                  header("Content-Disposition: inline; filename=agb_raummiete.pdf");
                  readfile('./inc/agb_raummiete.pdf'); 
                  ...bringt mich auch nicht weiter...
                  Wenn ich bei readfile die Anführungsstriche weglasse, gibt es Scriptfehlermeldungen.

                  Nehme ich in readfile das "./" raus, wird die Datei in Quelltext beginnend mit %PDF augegeben...
                  (an anderen Stellen benötige ich aber "./" im Pfad zu den Dateien, damit sie geladen werden)

                  Ich bekomme sogar öfters die Fehlermeldung "...beginnt nicht mit %PDF" und es wird ein falscher Pfad in der fehlermeldung angezeigt, selbst wenn Stunden vorher wenigstens der Quelltext angezeigt wurde...

                  Testserver ist xampp, Testbrowser war IE8.
                  Opera und FF reagieren analog.


                  Daraufhin habe ich eagle275 sein Script jedoch mit "Content-Disposition: inline" getestet.


                  Da bleibt erst einmal der Content-Breich leer, bis ich "readfile(...)" benutze, wo ich dann ebenfalls höchstens Quelltext ausgegeben bekomme...

                  Die PDF selber wird von Adobe sauber angezeigt.
                  gebe ich "Content-Disposition: attachment" ein, kommt es beim Downloadversuch zur Fehlermeldung "...beschädigt oder..."


                  OK, irgend etwas läuft bei mir hier also falsch...

                  Die Frage ist jetzt, ob ich einen und welchen Denkfehler ich mache.

                  Oder geht es grundsätzlich nicht, dass ich eine PDF in eine externen php-Datei hinein lade und diese php-Datei dann im Content der index.php includiere?


                  Ach ja:
                  Die header stehen an erster Stelle der php-Datei.
                  Egal, ob nun zw. headern und readfile noch HTML-Sachen stehen (zwischen ?> und <?) oder nicht: Es ändert nichts an den Reaktionen betreffs der PDF-Ausgabe...

                  Die PDF selber ist 1.129k groß.

                  Wo könnte ich also ansetzen oder welche Alternativen habe ich (außer den Text direkt in ein HTML zu schreiben und am Ende der Datei die PDF als Download anzubieten) ?

                  Kommentar


                  • #10
                    OK, bevor ich mich weiter ohne Hilfestellungen mit dem fehlerhaften Anzeigen des PDF-Dokuments (wird nur Quelltext angezeigt) im Content-Bereich rumärgere, habe ich den einfacheren Weg gewählt: Ich habe den Inhalt der PDF jetzt als Inhaltsseite erstellt und biete am Ende der Seite die eigentliche PDF-Datei zum Download an.

                    Kommentar

                    Lädt...
                    X