xbrtll: Downloadscript - Header wurde schon gesendet

Beitrag lesen

Hallo allerseits!

Als PHP-Anfänger habe ich mich mal an ein Script gewagt, mit dem ich einen passwortgeschützten Download realisieren will. Dabei ist folgendes herausgekommen:

  
<?php	  
	if(!isset($_POST['pass'], $_POST['id'])){  
		die ("Bitte verwende ein gültiges Formular von der Homepage!");  
	}  
	if(!("098f6bcd4621d373cade4e832627b4f6" == md5($_POST['pass']))){  
		die ("Du hast ein falsches Passwort eingegeben!");  
	}  
	else{  
		$download = $_POST['id'];  
		$filelist = array("testdatei" => "/usr/www/users/xbrtll/downloads/test.zip");  
		if(!isset($filelist[$download])){  
			die ("Der gewünschte Download ist nicht vorhanden!");  
		}  
		header("Content-Tye: application/zip");  
		header("Content-Disposition: attachment; filename=$download");  
		readfile($filelist[$download]);  
	}  
?>  

(Die Konstruktion über ID und den filelist-Array dient dazu, das Script später auf mehrere verschiedene Downloads ausweiten zu können.)

Jedoch funktioniert das nicht, denn wenn das Script mit korrekten Werten für Passwort und ID aufgerufen wird, kommt vom Server folgendes:

HTTP/1.1 200 OK
Date: Fri, 14 Aug 2009 23:50:53 GMT
Server: Apache/1.3.34 (Debian) mod_auth_pam/1.1.1 mod_gzip/1.3.26.1a mod_ssl/2.8.25 OpenSSL/0.9.8c mod_perl/1.29 mod_fastcgi/2.4.6 mod_jk/1.2.18 AuthMySQL/4.3.9-2 FrontPage/5.0.2.2635
X-Powered-By: PHP/5.2.10
Keep-Alive: timeout=15, max=99
Connection: Keep-Alive
Content-Type: text/html
Content-Length: 443

<br />
<b>Warning</b>:  Cannot modify header information - headers already sent by (output started at /usr/www/users/xbrtll/download.php:1) in <b>/usr/www/users/xbrtll/download.php</b> on line <b>14</b><br />
<br />
<b>Warning</b>:  Cannot modify header information - headers already sent by (output started at /usr/www/users/xbrtll/download.php:1) in <b>/usr/www/users/xbrtll/download.php</b> on line <b>15</b><br />
PK������������������

Wenn ich das richtig verstehe, können also die header-Funktionen nichts mehr am Header ändern, weil bereits vorher einer gesendet wurde. Warum aber ist das passiert? Und was kann ich dagegen unternehmen?

Falls wichtig, kann man die php-Konfiguration unter http://testen.de/info.php5 anschauen.

Oder gibt es eine grundsätzlich andere Herangehensweise, die ich wählen sollte? Ich habe mich dabei an einem Tutorial sowie dem php-Handbuch orientiert.

Schon mal vielen Dank an alle, die sich mein Problem angeschaut haben und hoffentlich auch antworten können!

Mit freundlichen Grüßen,

xbrtll