zipfile wird nicht im browser angezeigt
ingo preuss
- php
Hallo NGler.
Ich habe mir unter http://www.dclp-faq.de/q/q-datei-download.html Quelltext fuer einen dateidownload via PHP gesucht und nun versucht ueberhaupt erstmal die zum download bestimmte datei auf dem apache-server anzeigen zu lassen. Auch hatte ich uber diese Problematik schon in einem frueheren posting gelesen und deswegen die Datei erstmal als zip.file abgelegt, da das dann wohl besser mit dem download klappen soll. Doch das Einzige was ich angezeigt bekomme, ist der Kommentar, der im zischen den bodytags der Datei steht. Das zipfile liegt im Probierverzeichnis htdocs/info01scripte welches ich auch als $basedir angegeben habe. Kann mir jemand sagen weshalb mir der Dienst versagt wird? Hier ein Teil des Quelltexts der download.php:
<?php
$download = $_GET['download'];
// Dieses Verzeichnis liegt außerhalb des Document Root und
// ist nicht per URL erreichbar.
$basedir = "htdocs/info01scripte";
// Übersetzung von Download-Bezeichner in Dateinamen.
$filelist = array(
"file1" => "htdocs/info01scripte/xmas2000.zip"
);
// Einbruchsversuch abfangen.
if (!isset($filelist[$download]))
die("Datei $download nicht vorhanden.");
Oder muesste ich den Parameter $download in einer anderen Datei als link setzen, damit's funktioniert?
Gruß
Ingo Preuß
Ich habe mir unter http://www.dclp-faq.de/q/q-datei-download.html Quelltext fuer einen dateidownload via PHP gesucht und nun versucht ueberhaupt erstmal die zum download bestimmte datei auf dem apache-server anzeigen zu lassen.
Doch das Einzige was ich angezeigt bekomme, ist der Kommentar, der im zischen den bodytags der Datei steht.
"Der im zischen den bodytags der Datei steht"? Was soll das bedeuten? Welche Datei, das Skript oder die zu übertragende Datei? Wenn's die zu übertragende ist, was für "bodytags" des zip-Formates meinst Du?
Das zipfile liegt im Probierverzeichnis htdocs/info01scripte welches ich auch als $basedir angegeben habe. Kann mir jemand sagen weshalb mir der Dienst versagt wird?
Wenn er Dir versagt wird, warum sagst Du dann, daß Du etwas angezeigt bekommst? Was passiert denn nun genau?
Hier ein Teil des Quelltexts der download.php:
Die Aussage "ein Teil" deutet leider immer darauf hin, daß der Fragenstellende die Hälfte mit dem Wichtigen vergessen hat ;)
$download = $_GET['download'];
// Übersetzung von Download-Bezeichner in Dateinamen.
$filelist = array(
"file1" => "htdocs/info01scripte/xmas2000.zip"
);// Einbruchsversuch abfangen.
if (!isset($filelist[$download]))
die("Datei $download nicht vorhanden.");
..wie erwartet. Wo wird denn da etwas ausgegeben? Ich sehe nichtmal das eigentliche "Arbeitstier", readfile(). Und auch keine "bodytags". Eigentlich gar nichts von dem, was ausgegeben werden soll (die Fehlermeldung "nicht vorhanden" hattest Du nicht erwähnt).
Schuss in's Blaue: Du gibst zwar in dem nicht aufgeführten Codeteil die Datei per readfile() aus, hast aber vergessen, dem Browser den Inhaltstyp (Content-Type) mitzuteilen, so daß er jetzt entweder versucht, die zip-Datei als text/html auszugeben (der Standardtyp für Ausgaben von PHP-Skripten) oder versucht den Typ selbst zu erraten und die Datei auspackt.
Oder muesste ich den Parameter $download in einer anderen Datei als link setzen, damit's funktioniert?
download muß nur in der URL hinterm Fragezeichen auftauchen, sprich "script.php?download=file1" muß zu irgendeinem Ergebnis führen.
Gruß,
soenk.e
Hier ein Teil des Quelltexts der download.php:
Die Aussage "ein Teil" deutet leider immer darauf hin, daß der Fragenstellende die Hälfte mit dem Wichtigen vergessen hat ;)
$download = $_GET['download'];
// Übersetzung von Download-Bezeichner in Dateinamen.
$filelist = array(
"file1" => "htdocs/info01scripte/xmas2000.zip"
);// Einbruchsversuch abfangen.
if (!isset($filelist[$download]))
die("Datei $download nicht vorhanden.");..wie erwartet. Wo wird denn da etwas ausgegeben? Ich sehe nichtmal das eigentliche "Arbeitstier", readfile(). Und auch keine "bodytags". Eigentlich gar nichts von dem, was ausgegeben werden soll (die Fehlermeldung "nicht vorhanden" hattest Du nicht erwähnt).
Schuss in's Blaue: Du gibst zwar in dem nicht aufgeführten Codeteil die Datei per readfile() aus, hast aber vergessen, dem Browser den Inhaltstyp (Content-Type) mitzuteilen, so daß er jetzt entweder versucht, die zip-Datei als text/html auszugeben (der Standardtyp für Ausgaben von PHP-Skripten) oder versucht den Typ selbst zu erraten und die Datei auspackt.
Gruß,
soenk.e
Hallo zusammen.
Wie Soenke schreibt, fehlt da die Haelfte. Ich habe das script von hier http://www.php-center.de/faq/faq-open_exec.html#open_exec-4 , nachzulesen unter Punkt 10.4 Nun ist mein großer Nachteil, dass ich mit PHP wenig experiences hab und von daher nicht beurteilen kann was fehlt oder nicht, jedenfalls noch nicht. Leider faengt das script, welches laut php-center downloadbare Dateien anzeigen soll, erst an der o.g. Stelle an. Was soll ich denn jetzt tun? Das was ich unter readfile() finde druebersetzen? Waere schoen, wenn ihr einen hilfreichen Rat geben koennt. Das einzige, was ich noch ueber das Kopierte gesetzt habe ist das <?php am Anfang und das ?> am Ende
Gruß
Ingo
Ich habe das script von hier http://www.php-center.de/faq/faq-open_exec.html#open_exec-4, nachzulesen unter Punkt 10.4 Nun ist mein großer Nachteil, dass ich mit PHP wenig experiences hab und von daher nicht beurteilen kann was fehlt oder nicht, jedenfalls noch nicht. Leider faengt das script, welches laut php-center downloadbare Dateien anzeigen soll, erst an der o.g. Stelle an. Was soll ich denn jetzt tun?
Kopiere erstmal das Skript komplett. In dem, was Du hier zitiert hattest, fehlte zumindest der Aufruf von readfile(), der die jeweilige Datei ausgeben soll.
Wenn Du das gemacht hast, beschreibe bitte nochmal genau, was eigentlich passiert.
Als Tipp vorweg kann ich Dir nur sagen, die Zeile
header("Content-Type: application/octet-stream");
durch
header("Content-Type: application/x-msdownload");
zu ersetzen, da der Internet Explorer beim Typ octet-stream den Inhalt untersucht und, wenn möglich und er ihm bekannt vorkommt, ihn an das eingestellte Programm weiterreicht. Erst mit x-msdownload öffnet er das Download-Fenster.
Gruß,
soenk.e