Apache Server und andere Verzeichnisse

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

  • Apache Server und andere Verzeichnisse

    Hallo!

    Ich habe da mal eine Frage: Ich habe den Apache Webserver laufen (das Paket xampp für Windows) und das führt mich nun zu meiner Frage:

    Ich habe im Serververzeichnis den Ordner htdocs, in dem sich meine Webseiten befinden. Nun möchte ich aber auf eine Datei zugreifen und sie downloadbar machen, welche sich in einem Verzeichnis befindet, welches mit dem Server nichts zu tun hat.

    Ein Beispiel: Meine Seite lauft sagen wir mal auf c:/server/htdocs/index.html. In der Index.html befindet sich der Link zu meinem Worddokument auf d:/daten/haushalt.doc. Wie kann ich also dem apache klarmachen, dass er auch auf diese Seite zugreifen soll? Wäre für Anregungen sehr dankbar.

    Leider kann ich diese Datei nicht im Serververzeichnis kopieren, da diese Datei im anderen Verzeichnis aktuell gehalten wird (über Lan). Brauche daher diese Datei nur für Unterwegs zum Nachsehen. Kann man das irgendwie bewerkstelligen?

    mfg,
    ayin

  • #2
    du schreibst eine Datei z.B. namens download.php. In diesem Datei liest du das doc-Dokument aus (fopen, fread, fclose), sende dann die Datei mit dem richtigen HTTP-Header (mit header()) zum Browser. Den Link zum Download kannst du etwa so bauen:
    <a href="download.php?para=bla..." ...>bla...</a>
    wobei para ein Parameter ist, der dir sagt, welche Datei du von wo herholst und zum Download senden mußt.

    Kommentar


    • #3
      Danke für die Antwort. Könntest du das bitte etwas vereinfachen, bin nicht so ein Profi.

      Kommentar


      • #4
        lies mal den Thread: http://www.php-resource.de/forum/sho...0&pagenumber=1
        Das Bild in diesem Fall ist zwar in der Datenbank, aber das Prinzip ist dasselbe. Die Funktionen zum auslesen habe ich dir vorhin schon gepostet, hier nochmals als Link:
        fopen
        fread
        fclose

        Kommentar


        • #5
          Ok, das mit dem Filetransfer funktioniert nun, blos ist das was ich erhalte kein Worddokument mehr, sonder eine reine Textdatei, bei der nichts mehr zu gebrauchen ist.

          Hier der verwendete Code:

          PHP-Code:
          <?php 
          function send_file($name) { 
            
          $status FALSE
            
          $path "c:/server/".$name
            if (!
          is_file($path) or connection_status()!=0) return(FALSE); 
            
          header("Content-type: application/octet-stream"); 
            
          header("Content-Disposition: inline; filename=\"".$name."\""); 
            
          header("Content-length: ".(string)(filesize($path))); 
            
          header("Expires: ".gmdate("D, d M Y H:i:s"mktime(date("H")+2date("i"),
                  
          date("s"), date("m"), date("d"), date("Y")))." GMT"); 
            
          header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); 
            
          header("Cache-Control: no-cache, must-revalidate"); 
            
          header("Pragma: no-cache"); 
            if (
          $file fopen($path'rb')) { 
             while(!
          feof($file) and (connection_status()==0)) { 
               print(
          fread($file1024*8)); 
               
          flush(); 
             } 
             
          $status = (connection_status()==0); 
             
          fclose($file); 
            } 
            return(
          $status); 

          ?>

          <?php 
          if (!send_file("verwaltung/Dienstauftrag.doc")) { 
          die (
          "file transfer failed"); 
          // either the file transfer was incomplete 
          // or the file was not found 
          } else { 
          // the download was a success 
          // log, or do whatever else 

          ?>
          Was ist daran falsch?
          Zuletzt geändert von asp2php; 16.11.2004, 14:12.

          Kommentar


          • #6
            mach aus
            header("Pragma: no-cache");
            if ($file = fopen($path, 'rb')) { while(!feof($file) and (connection_status()==0)) { print(fread($file, 1024*8));
            flush();
            }
            $status = (connection_status()==0);
            fclose($file);
            }
            return($status);
            mal
            PHP-Code:
            return readfile($path); 
            und wenn es ein worddokument ist, wäre application/msword eventuell besser als application/octet-stream
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              Da kommt leider noch immer nur irgendwas raus und nicht das gewünschte Worddokument.

              Kommentar


              • #8
                wie sieht's denn momentan aus? Bitte die Codezeilen so umbrechen, dass man mit einer Auflösung 1024 x 768 beim Lesen nicht nach rechts scrollen muß. Danke.

                Kommentar


                • #9
                  Also da ist noch immer nichts brauchbares. Der ladet zwar das File herunter, ist aber absolut unbrauchbar.

                  Meinst du mit den Codezeilen mich? Ich hab das nur ganz normal gepostet, mir fällt da nicht auf, dass bei 1024*768 das falsch angezeigt wird.

                  Kommentar


                  • #10
                    Jetzt hat es funktioniert. Der Fehler war hier:
                    if ($file = fopen($path, 'rb'))
                    Da musste das ' durch ein " ersetzt werden. Dachte nicht, das dies so einen grossen Unterschied macht.

                    Kommentar


                    • #11
                      HAbe soeben festgestellt, dass der Download nur mit Opera einwandfrei funktioniert, aber nicht mit Mozilla FireFox noch mit Internet Explorer.

                      Kommentar


                      • #12
                        So, nächstes Problem. Leider überträgt er die Datei im ASCII-Modus und nicht im Binären Modus. Wie kann ich das umstellen, weil die Datei wird ja binär geöffnet.

                        Kommentar


                        • #13
                          mach mal so:
                          PHP-Code:
                          ...
                          header("Content-type: application/msword\n"); 
                          header("Content-Disposition: filename=\"".$name."\"\n"); 
                          header("Content-length: ".filesize($path)."\n"); 
                          if (
                          $file fopen($path'rb')) {
                              
                          $data fread($filefilesize($path));
                              
                          fclose($file);
                              echo 
                          $data;
                          }
                          ... 
                          funz bei mir mit allen Browsers

                          Kommentar


                          • #14
                            Wird leider noch immer ASCII übertragen.

                            Kommentar


                            • #15
                              code zeigen

                              Kommentar

                              Lädt...
                              X