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:
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
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);
?>
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
Kommentar