AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [PHP] HEADER Downloadweiterleiter einer Datei

[PHP] HEADER Downloadweiterleiter einer Datei

Ein Thema von sarte · begonnen am 6. Mär 2009 · letzter Beitrag vom 6. Mär 2009
Antwort Antwort
sarte

Registriert seit: 23. Mai 2008
Ort: Australien
66 Beiträge
 
Delphi 7 Enterprise
 
#1

[PHP] HEADER Downloadweiterleiter einer Datei

  Alt 6. Mär 2009, 11:03
Hallo Leute,
ich habe ein kleines Problem:
Wenn jemand auf meine Website geht und z.b. ein Programm runterladen möchte dann ist z.b. das Archiv einer RAR-Datei zerstört bzw. man läd nur 0 KB runter.
Damit der User das Programm erhält muss er natürlich auf einen Link klicken. Dieser Link führt dann zu 'download.php'. Über get erhalte ich dann den Namen der Datei:
Delphi-Quellcode:
<?php
[...]
$file = 'prog/'; //Pfad der Datei
$file .= $_GET['prog']; // z.b. hallo.rar
  // Dateityp
  header( 'Content-type: application/octet-stream' );
  // Größe der Datei
 header( 'Content-Length: ' . filesize( $file ) );
  // Dateiname
  $dateiname = basename( $file );
  header( 'Content-Disposition: attachment; filename="' . $dateiname . '"' );
  // Ausgeben der Datei
 readfile( $file );
   }

Hab ich dort einen Fehler gemacht?
Ich sehe es nicht...
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.987 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: [PHP] HEADER Downloadweiterleiter einer Datei

  Alt 6. Mär 2009, 11:24
Hi,

ich kann dir ja mal zeigen, wie ich es mache:

Code:
$filename = '...';
$filename = $config_main['root'] . $filename; // absoluter Pfad
$file_size = filesize($filename);

header('Content-Type: ' . get_mime_type());
header('Content-Disposition: attachment; filename=' .
   basename($config_main['root'] . $filename));
header('Content-Length: ' . $file_size);

readfile($config_main['root'] . $filename);
Die Funktion get_mime_type() ist diese:

Code:
// get mime type for the different browsers
function get_mime_type()
{
   $agent = $_SERVER['HTTP_USER_AGENT'];

   if (ereg('Opera(/| )([0-9].[0-9]{1,2})', $agent))
   {
      $return = 'application/octetstream';
   }
   else if (ereg('MSIE ([0-9].[0-9]{1,2})', $agent))
   {
      $return = 'application/octetstream';
   }
   else
   {
      $return = 'application/octet-stream';
   }

   return $return;
}
Grüße, Matze
  Mit Zitat antworten Zitat
Florian H

Registriert seit: 30. Mär 2003
Ort: Mühlacker
1.043 Beiträge
 
Delphi 6 Professional
 
#3

Re: [PHP] HEADER Downloadweiterleiter einer Datei

  Alt 6. Mär 2009, 11:52
Zitat von sarte:
Über get erhalte ich dann den Namen der Datei:
Delphi-Quellcode:
<?php
[...]
$file = 'prog/'; //Pfad der Datei
$file .= $_GET['prog']; // z.b. hallo.rar
  // Dateityp
  header( 'Content-type: application/octet-stream' );
  // Größe der Datei
 header( 'Content-Length: ' . filesize( $file ) );
  // Dateiname
  $dateiname = basename( $file );
  header( 'Content-Disposition: attachment; filename="' . $dateiname . '"' );
  // Ausgeben der Datei
 readfile( $file );
   }
Würde ich in der Form sowieso nicht verwenden ... es dürfte nicht lange dauern, bis jemand auf Ideen "?file=../config.inc.php" oder "?file=../db.inc.php" (wie auch immer die Dateien heißen) kommt - wenn dann der Server nicht sicher konfiguriert ist (kein Zugriff auf .inc*-Dateien) oder das Script anderweitig doof ist, kommt man schnell an Config-Dateien oder DB-Zugangsdaten ...
Florian Heft
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.536 Beiträge
 
#4

Re: [PHP] HEADER Downloadweiterleiter einer Datei

  Alt 6. Mär 2009, 21:41
Zitat von Florian H:
Würde ich in der Form sowieso nicht verwenden ... es dürfte nicht lange dauern, bis jemand auf Ideen "?file=../config.inc.php" oder "?file=../db.inc.php" (wie auch immer die Dateien heißen) kommt - wenn dann der Server nicht sicher konfiguriert ist (kein Zugriff auf .inc*-Dateien) oder das Script anderweitig doof ist, kommt man schnell an Config-Dateien oder DB-Zugangsdaten ...
Sagen wirs so: damit die Datei eingebunden werden kann, muss PHP sie lesen koennen. In dem Fall kann man die Datei auch ueber readfile() auslesen. Am geschicktesten ist es, die Sache ueber eine ID zu loesen, und nicht den Dateinamen zu uebergeben.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Florian H

Registriert seit: 30. Mär 2003
Ort: Mühlacker
1.043 Beiträge
 
Delphi 6 Professional
 
#5

Re: [PHP] HEADER Downloadweiterleiter einer Datei

  Alt 6. Mär 2009, 22:06
Zitat von alcaeus:
Zitat von Florian H:
Würde ich in der Form sowieso nicht verwenden ... es dürfte nicht lange dauern, bis jemand auf Ideen "?file=../config.inc.php" oder "?file=../db.inc.php" (wie auch immer die Dateien heißen) kommt - wenn dann der Server nicht sicher konfiguriert ist (kein Zugriff auf .inc*-Dateien) oder das Script anderweitig doof ist, kommt man schnell an Config-Dateien oder DB-Zugangsdaten ...
Sagen wirs so: damit die Datei eingebunden werden kann, muss PHP sie lesen koennen.
Hast recht, da hab' ich völlig falsch gedacht...
Also entweder ID oder eine sichere Parameter-Prüfung (z.b. nur [\.a-zA-Z0-9_-] als erlaubte Zeichen) - ersteres ist aber schöner und sicherer.
Florian Heft
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf