Dateien von externem FTP-Server downloaden

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

  • Dateien von externem FTP-Server downloaden

    Hallo erst mal.

    bis heute konnte ich alle meine PHP Probleme mit Hilfe von diversen Foren und googeln lösen. Doch nun habe ich ein Problem für welches ich noch nichts passendes gefunden habe.

    Situation:
    Ich erstelle gerade eine kleine Webseite die eine Bildergalerie enthält.
    Diese Bilder sind von mir bearbeitet (Grösse verkleinert) und auf dem Webserver abgelegt. Die User können diese Bilder jetzt als Thumbernail und in Standardgrösse (so wie ich sie auf dem Webserver abgelegt habe) anschauen. Nun möchte ich die Bilder zum Download anbieten.
    Die Standardbilder auf dem Webserver sind kein Problem. Die kann ich zum Download anbieten. -> Beim Bild kann ein Link (Bild downloaden) angeklickt werden. Darauf öffnet sich der Downloaddialog und der User kann festlegen wo er das Bild speichern will.

    Aber hier kommt jetzt das Problem:
    Die original Bilder in Originalgrösse liegen auf einem externen FTP-Server. Grund:Platzmangel auf dem Webserver.
    (FTP-Server ist mein privater 'alter' Rechner der diese Aufgabe übernimmt. Der FTP-Server ist Passwort geschützt.)
    Wie kann ich jetzt mit einem PHP-Script erreichen, dass die original Bilder zum Download angeboten werden? Sprich, der User bekommt das original Bild und nicht das welches auf dem Webserver zu sehen ist.

    Im Moment benutze ich die folgende PHP-Funktion:

    PHP-Code:
    <?php

    function dl_file($file){

      
    //First, see if the file exists
       
    if (!is_file($file)) { die("<b>404 File not found!</b>"); }

       
    //Gather relevent info about file
       
    $len filesize($file);
       
    $filename basename($file);
       
    $file_extension strtolower(substr(strrchr($filename,"."),1));

       
    //This will set the Content-Type to the appropriate setting for the file
       
    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;
             case 
    "txt"$ctype="text/plain"; break;
         
    //The following are for extensions that shouldn't be downloaded (sensitive stuff, like php files)
         
    case "php":
         case 
    "htm":
         case 
    "html": die("<b>Cannot be used for "$file_extension ." files!</b>"); break;
         
    //case "txt": die("<b>Cannot be used for ". $file_extension ." files!</b>"); break;

         
    default: $ctype="application/force-download";
       }

       
    //Begin writing headers
       
    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");
       
       
    //Use the switch-generated Content-Type
       
    header("Content-Type: $ctype");

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



     }

      
    $file "Hier wird die Bilder-ID übergeben";
        
    dl_file($file);

    ?>
    PS: Die Funktion ist nicht von mir, weis aber leider nicht mehr woher ich die habe.

    Gibt es überhaupt eine Möglichkeit meine gewünschte Aufgabe mit PHP zu lösen?

    Wenn ja, bin ich für jede Hilfe dankbar die mir weiterhilft.

    An diese Stelle schon mal vielen Dank!

    Gruss Anton

  • #2
    um einen download anzubieten, musst du den zugriff auf den dateiinhalt haben (wie du anhand deiner aktuellen funktion siehst - readfile ist dafür zuständig). das kann das ft-protokoll nicht, deswegen wirst du die datei vor dem download immer erst temporär auf dem server zwischenspeichern müssen, auf dem php-läuft.

    hier wurde ein ähnliches verfahren besprochen: http://www.delphipraxis.net/topic67300,0.html

    siehe aber auch diese möglichkeit:
    http://de3.php.net/manual/de/functio...file.php#63649

    (kommentar von "stefan at stefandouma dot nl")
    Zuletzt geändert von penizillin; 14.10.2006, 17:09.

    Kommentar


    • #3
      Vielen Dank für die schnelle Hilfe,

      ich werde mir diese Hinweise anschauen und auch die daraus resultierenden Möglichkeiten testen.

      Und wieder bin ich dank der Hilfe von dritter Seite etwas schlauer geworden.

      Kommentar

      Lädt...
      X