dipps
Goto Top

Bilder auf Webseite nicht ausführen sondern speichern lassen

Bilder auf Webseite nicht ausführen sondern speichern lassen

Hallo ich habe einen transfer Ordner auf der Homepage wo dateien hochgeladen werden können und der Empfänger anschließend eine Email bekommt wo er sie runterladen kann.

Wenn jetzt jemand ein jpg hoch läd bekommt der Empfänger einen link http://domain.de/upload/bild.jpg
wenn der Empfäger den Link anklickt in der Email wird er direkt zu dem Bild geleitet und es wird Dargestellt es soll aber dann ein Fensterkommen Datei Speichern bzw beim IE Speichern unter.

Wie kann ich das machen das das Fenster bei jpg und pdf Dateien automatisch erscheint

Das ganze Upload mache ich mit PHP

Content-Key: 155693

Url: https://administrator.de/contentid/155693

Printed on: April 26, 2024 at 11:04 o'clock

Member: godlie
godlie Nov 24, 2010 at 11:56:40 (UTC)
Goto Top
hallo,

das lässt sich realisieren indem man alles was mit Bildern zu tun hat nicht direkt ausgiebt, sondern über ein Script leitet.
Stichwort ist hier der richtige ContentType und Content-Disposition afaik.

Die Umleitung aller Bilder kannst du über mod_rewrite in einer htaccess realisieren, sodass alle z.b. *.jpg auf ein script dl.php?input=datei.jpg läuft.

Hier ein Script:
http://www.selfphp.info/kochbuch/kochbuch.php?code=37
Member: Dipps
Dipps Nov 24, 2010 at 12:18:22 (UTC)
Goto Top
kannst du mir das scipt mal für die htaccess fertig machen? ich bekomme das irgenwie nicht hin
Member: godlie
godlie Nov 24, 2010 at 12:29:42 (UTC)
Goto Top
Was hast denn bisher schon probiert?
Member: Dipps
Dipps Nov 24, 2010 at 12:48:41 (UTC)
Goto Top
RewiteRule (.*) http://domain.de/download.php$file=

dann habe ich das Fiele fest eingetragen was er sich ja dynamisch nehmen soll
Ich kopiere meinen Aktuellen Code nochmal

RewriteEngine on
RewriteRule (.*)\.JP$ http://www.domain.de/download.php$file=$1
Member: Dipps
Dipps Nov 24, 2010 at 14:17:11 (UTC)
Goto Top
So habe es jetzt hinbekommen
im Verzeichniss ist eine .htaccess mit folgendem Code
RewriteEngine on

RewriteRule ^(.*)$ http://www.domaine.de/download.php?file=$1&ordner=upload [R=302,NC,L]

als download.php habe ich folgenden code
<?
function makeDownload($file, $dir, $type){

header("Content-Type: $type")  
header("Content-Disposition: attachment; filename=\"$file\"");  
readfile ($dir.$file);

}

$dir="/var/www/".$_GET['ordner']."/";  
$type="application(octet-stream";  

if(!empty($_GET['file'] && !preg_match ('=/=', $_GET['file'])){  
if(file_exists ($dir.$_GET['file']))  
makeDownload($_GET['file'],$dir,$type);  
else
echo"Datei nicht Vorhanden!<br>";  
}

?>

Funktioiert damit für jede Datei bzw Dateityp in dem Ordner.
Vielspass mit dennen die es auch brauchen.
Member: godlie
godlie Nov 24, 2010 at 14:59:35 (UTC)
Goto Top
Ein kleiner Hinweis noch:

Vermeide sog. Short Open Tags ( <? ) die werden in zukünftigen PHP Versionen nicht mehr funktionieren .

Wie ich sehe hast eine Überprüfung auf / auch drinne damit sich niemand durchs System graben kann oder?
Member: dog
dog Nov 24, 2010 at 18:29:41 (UTC)
Goto Top
Und schon haben wir wieder eine schöne Sicherheitslücke:

http:// www.domaine.de/download.php?file=password&ordner=../../etc

Da sind wieder mal der Phantasie keine Grenzen gesetzt.

Abgesehen davon:
RewriteRule ^(.*)$ http://www.domaine.de/download.php?file=$1&ordner=upload [R=302,NC,L]

Diese Regel ist falsch.
  • Zuerst mal gibt es keinen Domain-Teil bei mod_rewrite wenn die URL lokal ist
  • Dann macht es gar keinen Sinn R=302 zu benutzen, weil es besser ist das für den Benutzer transparent zu machen
  • Dann wird NC benutzt, aber es gibt im Match gar keinen Teil, der dadurch beeinflusst werden könnte

Und ich glaube nicht, dass das hier jemals funktioniert hat:
if(!empty($_GET['file'] && !preg_match ('=/=', $_GET['file']))
da nichtmal die Klammern ausbalanciert sind.