Forenindex » Programmierung/Entwicklung » PHP und MySQL » PHP für automatischen Download einer EXE - Datei

PHP für automatischen Download einer EXE - Datei

westsamoa
Beiträge gesamt: 29

17. Jun 2011, 20:28
Bewertung:

gelesen: 4548

Beitrag als Lesezeichen
Hallo Leute,

ich hab ein für mich unlösbares Problem. Ich möchte einem User anbieten eine Exe-Datei von meinem Webserver zu downloaden indem er nur die Seite http://xxx/download.php anklickt.

In dem Download verzeichnis liegt nur die download.php und die besagte EXE (der Name der Exe ändert sicht öfters, daher ohne starrem Namen).

Hier mein PHP Code. Er lädt die Datei nicht herunter, sondern öffnet diese im Browser so, dass der ganze Bildschirm voll mir Hieroglyphen ist. Was ist falsch an dem Code? Danke.

<?php
// Öffnet das Verzeichnis wo dieses Script liegt.
$verzeichnis = opendir('.');
// Verzeichnis lesen
while ($file = readDir($verzeichnis)) {
// Höhere Verzeichnisse nicht anzeigen!
if ($file != "." && $file != "..") {
// Dateityp filtern. Es werden nur .exe-Dateien angezeigt
if (strstr($file, ".exe")) {
// Dateiendung vom Dateinamen filtern
$name = $file;
// Link erstellen
echo 'Falls kein automatischer Download startet, hier klicken: ';
echo "<a href=\"./$file\">$file</a><br>\n";

}
}
}

if (file_exists($name)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($name));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($name));
ob_clean();
flush();
readfile($name);
exit;
}
closeDir($verzeichnis); // Verzeichnis schließen

?>
Gruss,
Frank

PHP für automatischen Download einer EXE - Datei

Pozor
Beiträge gesamt: 892

18. Jun 2011, 15:50
Bewertung:

gelesen: 4507

Beitrag als Lesezeichen
Hallo,

Dein Problem ist, dass Du vor dem Header schon Text ausgibst.
Dies bewirkt, dass die Header Infos nicht mehr gesendet werden können.

Die Lösung, Download in 2 Schritten:
1. Ausgabe des Contents und Metaweiterleitung
2. Reiner Download

Code
<?php 
// Öffnet das Verzeichnis wo dieses Script liegt.
$verzeichnis = opendir('.');
// Verzeichnis lesen
while ($file = readDir($verzeichnis))
{
// Höhere Verzeichnisse nicht anzeigen!
if ($file != "." && $file != "..")
{
// Dateityp filtern. Es werden nur .exe-Dateien angezeigt
if (strstr($file, ".exe"))
{
// Dateiendung vom Dateinamen filtern
$name = $file;
// Link erstellen
if(!intval($_GET['download']))
{ //Gib den Link nur aus, wenn kein Filedownload angefordert ist
echo '<html>';
echo '<head>';
echo '<meta http-equiv="refresh" content="2; url=download.php?download=1">'; //nach 2 Sekunden wird der Download ausgeführt.
echo '</head>';
echo '<body>';
echo 'Falls kein automatischer Download startet, hier klicken: ';
echo "<a href=\"./$file\">$file</a><br>\n";
echo '</body>';
echo '</html>';
}
}
}
}
closeDir($verzeichnis); // Verzeichnis schließen

if(file_exists($name) AND intval($_GET['download']))
{
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($name));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($name));
readfile($name);
exit();
}



Gruss Stefan


"KISS - KEEP IT SIMPLE, STUPID"
PHP Documentation Download

PHP für automatischen Download einer EXE - Datei

westsamoa
Beiträge gesamt: 29

18. Jun 2011, 19:40
Bewertung:

gelesen: 4481

Beitrag als Lesezeichen
Hallo Stefan,

funktioniert super.

Vielen Dank und ein schönes WE.

Gruß, westsamoa
Gruss,
Frank