Download html-Datei per php-script
Download html-Datei per php-script
am 16.07.2006 15:22:41 von Wolf Heyne
Komm einfach nicht dahinter:
Ich möchte eine html-Datei zum Download anbieten, klingt blöd, hat
aber Sinn: Es ist ein Dienstplan, der als html-Datei hochgeladen und
in einem Unterverzeichnis abgelegt wird. Er wird dann auf der Seite in
einem iframe dargestellt, mit hin- und herblättern etc.
Die Kollegen möchten ihn aber auch runterladen und ohne Menü- und
Funktions-bereiche drucken.
Ich verwende folgendes script:
if (isset($_GET['getfile']))
{
$filename = basename($_GET['getfile']);
$file = "/web_heygo/plan/" . $filename;
if (file_exists($file))
{
$len = filesize($file);
header('content-type: text/html');
header('content-length: '.$len);
header('content-disposition: attachment;
filename='.basename($file));
$fp=fopen($file, 'rb');
while ( ! feof($fp) )
{
set_time_limit(30);
$buffer = fread($fp, 1024);
echo $buffer;
}
exit;
} else {
echo 'Fehler: Datei nicht gefunden';
echo $file;
}
} else {
echo '
href="'.$_SERVER['PHP_SELF'].'?shift='.$shift.'&getfile='.$w unschmonat.'">[
Download ]';
}
Die Variable $wunschmonat enthält den Dateinamen des im iframe
dargestellten Dienstplans.
Dennoch kommt beim Download immer die php-Seite mit all ihren Menüs
und Funktionsbereichen an und nie der im Unterverzeichnis abgelegte
reine html-Diensplan.
Hab schon einiges versucht, komm aber nicht weiter!
Was ist falsch?
Danke, Wolf
Re: Download html-Datei per php-script
am 17.07.2006 18:34:04 von Michael Moeckli
Wolf Heyne wrote:
> Komm einfach nicht dahinter:
>
> Ich möchte eine html-Datei zum Download anbieten, klingt blöd, hat
> aber Sinn: Es ist ein Dienstplan, der als html-Datei hochgeladen und
> in einem Unterverzeichnis abgelegt wird. Er wird dann auf der Seite in
> einem iframe dargestellt, mit hin- und herblättern etc.
> Die Kollegen möchten ihn aber auch runterladen und ohne Menü- und
> Funktions-bereiche drucken.
Das ganze funktioniert sicher auch mit CSS.
Hast Du das mal angeschaut?
Gruss Michael
Re: Download html-Datei per php-script
am 17.07.2006 19:15:37 von Frank Schenk
Wolf Heyne schrieb:
> Komm einfach nicht dahinter:
>
> Ich möchte eine html-Datei zum Download anbieten, klingt blöd, hat
> aber Sinn: Es ist ein Dienstplan, der als html-Datei hochgeladen und
> in einem Unterverzeichnis abgelegt wird. Er wird dann auf der Seite in
> einem iframe dargestellt, mit hin- und herblättern etc.
> Die Kollegen möchten ihn aber auch runterladen und ohne Menü- und
> Funktions-bereiche drucken.
> Ich verwende folgendes script:
Das Script funktioniert wunderbar. Was sagt denn echo $file? Wie wäre
es, wenn du mal ein target angibst um zu schauen, wie das Script sich
verhält, wenn du es in einem neuen Fenster öffnest?
Frank
Re: Download html-Datei per php-script
am 17.07.2006 22:35:10 von Wolf Heyne
On Mon, 17 Jul 2006 19:15:37 +0200, Frank Schenk
wrote:
>
>Das Script funktioniert wunderbar. Was sagt denn echo $file? Wie wäre
>es, wenn du mal ein target angibst um zu schauen, wie das Script sich
>verhält, wenn du es in einem neuen Fenster öffnest?
>
>Frank
Hallo Frank,
Danke für deine Antwort, echo $file gibt den richtigen Dateinamen an,
der steht auch oben in der url vom download, target öffnet ein leeres
Fenster unter dem Downloadfenster, sonst ändert sich nichts. Jetzt ist
mir aber aufgefallen, dass nur der html-code in der php-Datei vor
diesem script-Teil der downgeladenen Datei vorangestellt wird, die
Fußzeile danach wird nicht mehr dargestellt. Ich werde mal diese
if (isset($_GET['getfile'])) {
-Schleife ganz nach oben ziehen und nur das
} else {
echo "
href='".$_SERVER['PHP_SELF']."?shift=".$shift."&getfile=".$w unschmonat."'
target='_blank'>[ Download ]";
}
da lassen, wo es erscheinen soll. Aber verstehen kann ich das nicht.
lieben Gruß, Wolf
Re: Download html-Datei per php-script
am 17.07.2006 23:16:45 von Johannes Vogel
Hi Wolf
Wolf Heyne wrote:
> Komm einfach nicht dahinter:
> Ich möchte eine html-Datei zum Download anbieten, klingt blöd, hat
> aber Sinn: Es ist ein Dienstplan, der als html-Datei hochgeladen und
> in einem Unterverzeichnis abgelegt wird. Er wird dann auf der Seite in
> einem iframe dargestellt, mit hin- und herblättern etc.
> Die Kollegen möchten ihn aber auch runterladen und ohne Menü- und
> Funktions-bereiche drucken.
> Ich verwende folgendes script:
[...]
> Die Variable $wunschmonat enthält den Dateinamen des im iframe
> dargestellten Dienstplans.
> Dennoch kommt beim Download immer die php-Seite mit all ihren Menüs
> und Funktionsbereichen an und nie der im Unterverzeichnis abgelegte
> reine html-Diensplan.
> Hab schon einiges versucht, komm aber nicht weiter!
> Was ist falsch?
1) Kein Parameter-Check. Ruf mal die Seite mit ?getfile=../../etc/passwd
auf... Oder auch was anderes...
Besser wäre: Directory in Array einlesen und mittels in_array()
Parameter auf Vorhandensein der Datei in diesem Verzeichnis überprüfen.
2) Statt fopen, feof, fread, etc.. Einfach file_get_contents() verwenden.
3) Was genau steht in deinem $file? Wirklich ohne Menü? Vielleicht hilft
bereits mal im Link ein target='_top' oder target='_blank' weiter...
4) Grundsätzlich wird ein Browser content-type text/html selbst
darstellen versuchen. Gerade IE interessiert sich nicht für
disposition:attachment. Vielleicht versuchst du's einfach mal mit
binary/octet-stream.
5) Statt echo 'hallo'.$name; eignet sich noch besser:
echo "\n";
Nein, nicht alles ist falsch. Das meiste ist eher so als Tipp gemeint.
HTH, Johannes
Re: Download html-Datei per php-script
am 18.07.2006 20:41:37 von Wolf Heyne
On Mon, 17 Jul 2006 23:16:45 +0200, Johannes Vogel
wrote:
>1) Kein Parameter-Check. Ruf mal die Seite mit ?getfile=../../etc/passwd
>auf... Oder auch was anderes...
>Besser wäre: Directory in Array einlesen und mittels in_array()
>Parameter auf Vorhandensein der Datei in diesem Verzeichnis überprüfen.
>
>2) Statt fopen, feof, fread, etc.. Einfach file_get_contents() verwenden.
>
>3) Was genau steht in deinem $file? Wirklich ohne Menü? Vielleicht hilft
>bereits mal im Link ein target='_top' oder target='_blank' weiter...
>
>4) Grundsätzlich wird ein Browser content-type text/html selbst
>darstellen versuchen. Gerade IE interessiert sich nicht für
>disposition:attachment. Vielleicht versuchst du's einfach mal mit
>binary/octet-stream.
>
>5) Statt echo 'hallo'.$name; eignet sich noch besser:
> echo "\n";
>
>Nein, nicht alles ist falsch. Das meiste ist eher so als Tipp gemeint.
>HTH, Johannes
Hallo Johannes,
Danke, ich lerne gern dazu
1) ich verwende basename($_GET['getfile'], das directory wird dann vom
script hinzugefügt und enthält nichts Wesentliches.
2) hat einen merkwürdigen Pfad irgendwo in Eigene Dateien davorgehängt
3) ja ist wirklich ohne Menü, _target hat auch nichts geändert
4) ? Muss ich noch nachlesen
Was es jetzt gebracht hat, ist die if-Schleife:
if (isset($_GET['getfile'])) {
ganz nach oben vor den ersten output zu nehmen,
und die else-Klausel unten durch
if (!isset($_GET['getfile'])) {
zu ersetzen.
Dennoch: sollte fopen() nicht nur den file einlesen, wie kommt der
output des scripts vor den fopen() da hinein?
Grüße, Wolfgang