phpbar.de logo

Mailinglisten-Archive

[php] Download einer Datei, die nicht im Document-Root liegt

[php] Download einer Datei, die nicht im Document-Root liegt

Johann-Peter Hartmann php_(at)_phpcenter.de
Fri, 24 Aug 2001 19:09:00 +0200


Hi Hans,

Jansen schrieb:

> ist es möglich, eine Datei runterzuladen, die nicht vom HTTP-Server (also
> die nicht im Document-Root liegt) freigegeben ist.
>
> Z. B. die Datei /home/ich/test-datei möchte ich runterladen. Die
> Userrechte
> sind mit chmod test-datei o+r gesetzt worden.
>
> Soviel ich weiss müsste das irgendetwas mit Headern sein...

	Du willst Header, Du bekommst Header :-)

	Diese Variante sollte sowohl im Netscape als
	auch im Internet-Explorer mit relativ
	grosser Zuverlässigkeit einen Download
	erzwingen, der nicht gecached wird.

$filename='/home/ich/test-datei';
if ((file_exists($filename)) && ($fp=fopen($filename,"r")) ) {
  if(strIstr(getenv(HTTP_USER_AGENT), "MSIE")) {
    header("Content-disposition: filename=".basename($filename));
    header("Content-type: application/x-ms-download");
      } else {
    header("Content-type: x-octet-stream");
    header("Content-disposition: attachment;filename=".basename($filename));
    header("Content-description: PHP4-Generated Data");
  };
  header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
  header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  header("Cache-Control: no-cache");
  header("Cache-Control: post-check=0, pre-check=0");
  header("Pragma: no-cache");
  header("Content-length: ".filesize($filename));
  fpassthru($fp);
  fclose($fp);
} else {
  error_log("Download-Problem: die angegebene Datei $filename konnte nicht
gefunden/geöffnet werden");
  header("Location: http://meinserver.tld/fehlerseite.html");
};

	Viele Grüße
	- johann



php::bar PHP Wiki   -   Listenarchive