Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Externen Link öffnen

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Externen Link öffnen

    Hallo zusammen,

    ich komme sicherlich mit einem schon durchgekauten Thema, habe aber beim Suchen keine passende Antwort gefunden.
    Ich will von einem web-Server aus über einen Link mit einer absoluten Adressierung ein Dokument (.doc,.xls, .pdf..)öffnen. Frage: geht das überhaupt oder wird die Sicherheitseinrichtung den Zugriff verweigern. Der Weg über ein signiertes Java-Applet im Falle einer .exe ist mir bekannt, die Frage ist, ob es für Dokumente einfacher geht. Ich meine es schon einmal gesehen zu haben, weiß aber nicht mehr wo und wie es ging.

    Danke für Eure Antwort

    Michael

  • #2
    Code:
    <a href = "brief.doc" >Brief</a>
    [PHP]if ($var != 0) {
    $var = 0;
    }[/PHP]

    Kommentar


    • #3
      Hallo Wolla,

      vielen Dank, aber genau das einfache Ding funktioniert nicht. Vielleicht nochmals zur Präzisierung, das Dokument, das ich öffnen will befindet sich nicht aut dem web-Server (localhost), sondern liegt auf einem Netzlaufwerk. Laufwerk, Pfad und Dokument entnehme ich einer mySQL-Datenbank und baue daraus einen Link (z.B. H:/Eigene Dateien/Dokumente/Briefe/Brief.doc) - nur der Link öffnet das Dokument nicht

      Grüße und Dank
      Michael

      Kommentar


      • #4
        Probiers mal durch Setzen der richtigen Header nebst readfile.
        [PHP]if ($var != 0) {
        $var = 0;
        }[/PHP]

        Kommentar


        • #5
          Was willst du erreichen? Dass das Dokument beim Aufruf des Links im Browser des Nutzers angezeigt wird? Das ist ohne entsprechendes Excel-/Word-/PDF-Viewer-Plugin nicht möglich, das Dokument wird bei Nichtvorhandensein eines entsprechenden Plugins immer zum Download angeboten.
          Refining Linux: “[url=http://www.refining-linux.org/archives/65/Performing-push-backups-Part-1-rdiff-backup/]Performing Push Backups – Part 1: rdiff-backup[/url]”

          Kommentar


          • #6
            Könnste Du das bitte einem Doofen kurz erklären, ich meine das mit dem Header und dem readfile

            Kommentar


            • #7
              Hallo Manko10,
              das mit dem Download ist auch vollkommen in Ordnung, aber der wird beim Klick auf den Link garnicht erst angeboten - es tut sich nichts. Kann aber mit den von Wolla angesprochen einstellungenzusammenhängen

              Kommentar


              • #8
                Was heißt, es tut sich nichts? Bekommst du wirren Zeichensalat oder bloß eine weiße Seite/Seitenladefehler? Wenn du Ersteres bekommst, musst du den Header setzen, bei Letzterem vielleicht auch, aber in erster Linie musst du entweder das Skript, das die Datei zum Download anbietet, überprüfen (sofern das über ein Skript läuft) oder (falls du das Dokument direkt referenzierst) sicherstellen, dass es noch innerhalb des Freigabeverzeichnisses des Webservers liegt.
                Refining Linux: “[url=http://www.refining-linux.org/archives/65/Performing-push-backups-Part-1-rdiff-backup/]Performing Push Backups – Part 1: rdiff-backup[/url]”

                Kommentar


                • #9
                  also .. gehn wir mal davon aus, dass dein www-user irgendwie an die Datei herankommt (Lese-Rechte hat) ...

                  binde dir das untenstehende als Funktion ein, mit Parameter $Datei ...
                  wobei $Datei dann den kompletten Pfad inklusive Dateiname enthalten muss!
                  PHP-Code:
                  $Dateiname basename($Datei);
                  $Groesse filesize($Datei);
                  $file=fopen($Datei,'r');
                  set_time_limit(0); // nur nötig für richtig grosse Dateien
                  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-ownload");
                      
                  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(); 
                  "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste [IMG]http://www.php.de/core/images/smilies/icon_lol.gif[/IMG]

                  Kommentar


                  • #10
                    Die Datei zeilenweise einzulesen, ist Blödsinn. Für diesen Zweck eignet sich readfile() deutlich besser. Aber vielleicht will der TE ein solches Download-Skript ja gar nicht.
                    Refining Linux: “[url=http://www.refining-linux.org/archives/65/Performing-push-backups-Part-1-rdiff-backup/]Performing Push Backups – Part 1: rdiff-backup[/url]”

                    Kommentar


                    • #11
                      Hallo Manko10

                      Das php-skript funktioniert, es sucht sich aus der Datenbank die Details und baut den Link auf, der dann über eine Variable eingelesen wird. Rufe ich das Skript im Browser auf, wir die gesamte Dokumentliste (Tabelle) generiert. Die Links stimmen und sind entsprechend hinterlegt. Wenn man mit dem Cursor drüber geht, ich auch der link als solches erkennbar, aber beim Anklicken tut sich nichts
                      ich denke, da liegt der Hase im Pfeffer, das Freigabeverzeichnis des webservers, wo kann ich das einstellen?

                      Kommentar


                      • #12
                        ich lese nicht Zeilenweise, nur speicherschonend jeweils 4 K häppchen ...

                        btw ist das ganze entliehen aus einem anderen Forenbeitrag, wo der Programmierer vor dem Problem stand SEHR GROSSE Dateien (jenseits 128 MB) downloadbar zu machen - und jedesmal mit readfile schlug ihn die PHP memory size aus der ini
                        "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste [IMG]http://www.php.de/core/images/smilies/icon_lol.gif[/IMG]

                        Kommentar


                        • #13
                          Dass das PHP-Skript funktioniert, ist klar.
                          Dein Problem ist also wirklich das Freigabe-/Document-Rootverzeichnis des Webservers (i.d.R. htdocs). Für weitere Informationen bitte Google bemühen.

                          Beitrag editiert:
                          […] @eagle275 Stimmt. ich habe jetzt nur die Schleife gesehen und musste gleich an diverse Uralt-Skripte denken, die per Google zu Hauf zu finden sind. Die Datei zeilenweise einzulesen ist nämlich wirklich Quark. festen Häppchen könnte aber sinnvoll sein, wenn auch bei kleinen Dateien Verschwendung. Das Verhalten von readfile() bei großen Dateien habe ich noch nicht analysiert.
                          Refining Linux: “[url=http://www.refining-linux.org/archives/65/Performing-push-backups-Part-1-rdiff-backup/]Performing Push Backups – Part 1: rdiff-backup[/url]”

                          Kommentar


                          • #14
                            dein Script muss aufs anklicken des Links reagieren ....

                            in meinem Fall mach ich das so :
                            PHP-Code:
                            if (isset($_GET['ibrex'])) 
                                
                            $this->ibrupload($_GET['ibrex']);

                            an meiner URL hängt der Link jeweils ein ?ibrex=ID-Nummer an (also die Zahl) ..

                            mein Script erkennt welche ID übergeben wurde, zieht sich den zugehörigen Pfad aus der Datenbank und startet den Download mit den Befehlen die ich vorhin hier gepostet habe

                            in meinem Fall ist auch weitgehend egal, wo die Datei liegt , hauptsache der Webserver kann sie Lesen (der User hat rechte )
                            "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste [IMG]http://www.php.de/core/images/smilies/icon_lol.gif[/IMG]

                            Kommentar


                            • #15
                              Das Verzeichnis ist insofern nicht zweitranging als dass der TE anscheinend direkt die Datei aufrufen will. Die alternative wäre ein solches PHP-Skript, was allerdings bei Weitem nicht an die Performance herankommt, wie ein direkter Aufruf. Wenn es sich nur um eine lokale Installation handelt, muss ein solches Skript auch nicht unbedingt sein.
                              Refining Linux: “[url=http://www.refining-linux.org/archives/65/Performing-push-backups-Part-1-rdiff-backup/]Performing Push Backups – Part 1: rdiff-backup[/url]”

                              Kommentar

                              Lädt...
                              X