Hallo erstmal!
Ich habe nach langer Suche ein "scheinbar" sehr einfaches OS-Script gefunden, das wirkungsvoll für Downloads den tatsächlichen Pfad der herunterzuladenden Datei versteckt, interessant für mich, da ich gerne ausgewählten Leuten Bilder-Links zuschicken möchte, diese jedoch nicht meine Verzeichnis-Strukturen durchschauen können und sich andere Bilder runterladen können sollen.
Hier erstmal das Script:
<?
/*
Copyright (c) 1999 Marcel Lemmen
E-mail: lemmen@support.nl
All rights reserved.
This code provided "As Is" with no warrantees express or implied.
The author and contributors are not liable for anything good or bad
that results from your use of this code.
You are free to distribute this for free provided this notice is included.
Please forward fixes/enhancements to the
author for inclusion in the next revision.
Usage:
Replace $files with the original with your files.
Replace $filenames with the filename people see when
downloading (CAN be different then file's!)
Replace $URL with your directory or the other URL.
That's all!
*/
$files=array('file1.zip','file2.zip');
$filenames=array('File1.zip','File2.zip');
$url="/home/lemmen/public_html/data/";
/* When the files are on another server, use the
whole address (http://www.server.com/dir/) in stead of /home/lemmen... */
$referer=ereg_replace("\?.","",$HTTP_REFERER);
$thisfile="http://$HTTP_HOST$PHP_SELF";
if ($referer!=$thisfile)
for ($i=0;$i<count($files);$i++)
echo "<P><A HREF=\"$PHP_SELF?$i\">",$filenames[$i],"</A>\n";
else {
$i=$QUERY_STRING;
$total=$url . $files[$i];
Header ("Content-Type: application/octet-stream");
Header ("Content-Length: ".filesize($total));
Header("Content-Disposition: attachment; filename=$filenames[$i]");
readfile($total);
}
?>
Das Ganze funktioniert so auch prima - aber was für mich sehr wichtig wäre, wäre, die Dateien/Dateinamen/Beschreibungen usw. nicht fix vorher eingeben zu müssen, sondern sozusagen eben mit dem Link zu verschicken. Ich dachte, das mache ich mit einem Link alá
"download.php?dateiname=bild.jpg&datum=25.12.04"
usw.
und rufe die übergebenen Werte mit GET ab und füge sie dann in das oben gepostete Script in den jeweiligen Arrays auf dem ersten Platz ein, z.B.
$files [0] = $dateiname;
anstatt der for i=0 bis irgendwas-Bedingung setze ich einfach überall das i=0.
So, und nun die Probleme: Wenn ich diese GET's und die Werte in die Arrays einlese BEVOR die if-Schleife startet und sie dann probehalber mit "echo" ausgebe, dann scheint alles super zu funktionieren. Der Link der Datei erscheint auch.
Wenn ich ihn dann aber anklicke, dann startet nicht der direkte Download der Datei (wie ursprünglich) sondern ich komme auf eine weitere Seite (ich schätze, das ist dann das, was die else-Bedingnung ist, wenn referer=thisfile wahr ist) und erst da kann ich dann einen weiteren Link anklicken, der den Download starten sollte -
download?0
aber nicht angezeigt wird.
Überhaupt bin ich am verzweifeln, hier stimmen dann auch die download-url und nichts mehr richtig. Und wenn ich versuche beim Ursprungsscript zuir Formatierung vorne und hinten eine head- und foot-Datei mit include reinzuholen, dann funkt das Script auch nicht mehr. Wo darf man da was ändern, wo nicht?
Kann mir jemand helfen, wie ich an dieses Script Parameter übergeben kann, ohne daß es lahm liegt? Oder weiß jemand ein anderes, das sowas (Link-Verschleierung und direktes Starten des Downloads beim Anklicken) schon sowieso beherrscht? Ich habe jetzt echt schon viele Seiten abgeklappert, PHPnet, PHPsource und wasweißichnichtnochalles, aber außer daß mir ständig genau solche Download-Links ins Gesicht springen, die genau das tun, was ich bräuchte, finde ich nirgendwo einen freien Quelltext zu dem Thema.
DANKE FÜR JEDE HILFE
Ich habe nach langer Suche ein "scheinbar" sehr einfaches OS-Script gefunden, das wirkungsvoll für Downloads den tatsächlichen Pfad der herunterzuladenden Datei versteckt, interessant für mich, da ich gerne ausgewählten Leuten Bilder-Links zuschicken möchte, diese jedoch nicht meine Verzeichnis-Strukturen durchschauen können und sich andere Bilder runterladen können sollen.
Hier erstmal das Script:
<?
/*
Copyright (c) 1999 Marcel Lemmen
E-mail: lemmen@support.nl
All rights reserved.
This code provided "As Is" with no warrantees express or implied.
The author and contributors are not liable for anything good or bad
that results from your use of this code.
You are free to distribute this for free provided this notice is included.
Please forward fixes/enhancements to the
author for inclusion in the next revision.
Usage:
Replace $files with the original with your files.
Replace $filenames with the filename people see when
downloading (CAN be different then file's!)
Replace $URL with your directory or the other URL.
That's all!
*/
$files=array('file1.zip','file2.zip');
$filenames=array('File1.zip','File2.zip');
$url="/home/lemmen/public_html/data/";
/* When the files are on another server, use the
whole address (http://www.server.com/dir/) in stead of /home/lemmen... */
$referer=ereg_replace("\?.","",$HTTP_REFERER);
$thisfile="http://$HTTP_HOST$PHP_SELF";
if ($referer!=$thisfile)
for ($i=0;$i<count($files);$i++)
echo "<P><A HREF=\"$PHP_SELF?$i\">",$filenames[$i],"</A>\n";
else {
$i=$QUERY_STRING;
$total=$url . $files[$i];
Header ("Content-Type: application/octet-stream");
Header ("Content-Length: ".filesize($total));
Header("Content-Disposition: attachment; filename=$filenames[$i]");
readfile($total);
}
?>
Das Ganze funktioniert so auch prima - aber was für mich sehr wichtig wäre, wäre, die Dateien/Dateinamen/Beschreibungen usw. nicht fix vorher eingeben zu müssen, sondern sozusagen eben mit dem Link zu verschicken. Ich dachte, das mache ich mit einem Link alá
"download.php?dateiname=bild.jpg&datum=25.12.04"
usw.
und rufe die übergebenen Werte mit GET ab und füge sie dann in das oben gepostete Script in den jeweiligen Arrays auf dem ersten Platz ein, z.B.
$files [0] = $dateiname;
anstatt der for i=0 bis irgendwas-Bedingung setze ich einfach überall das i=0.
So, und nun die Probleme: Wenn ich diese GET's und die Werte in die Arrays einlese BEVOR die if-Schleife startet und sie dann probehalber mit "echo" ausgebe, dann scheint alles super zu funktionieren. Der Link der Datei erscheint auch.
Wenn ich ihn dann aber anklicke, dann startet nicht der direkte Download der Datei (wie ursprünglich) sondern ich komme auf eine weitere Seite (ich schätze, das ist dann das, was die else-Bedingnung ist, wenn referer=thisfile wahr ist) und erst da kann ich dann einen weiteren Link anklicken, der den Download starten sollte -
download?0
aber nicht angezeigt wird.
Überhaupt bin ich am verzweifeln, hier stimmen dann auch die download-url und nichts mehr richtig. Und wenn ich versuche beim Ursprungsscript zuir Formatierung vorne und hinten eine head- und foot-Datei mit include reinzuholen, dann funkt das Script auch nicht mehr. Wo darf man da was ändern, wo nicht?
Kann mir jemand helfen, wie ich an dieses Script Parameter übergeben kann, ohne daß es lahm liegt? Oder weiß jemand ein anderes, das sowas (Link-Verschleierung und direktes Starten des Downloads beim Anklicken) schon sowieso beherrscht? Ich habe jetzt echt schon viele Seiten abgeklappert, PHPnet, PHPsource und wasweißichnichtnochalles, aber außer daß mir ständig genau solche Download-Links ins Gesicht springen, die genau das tun, was ich bräuchte, finde ich nirgendwo einen freien Quelltext zu dem Thema.
DANKE FÜR JEDE HILFE