Tach!
Von deinen gesetzten Headern ist kein einziger in der Ausgabe zu sehen. Ist die Ausgabe aller Fehlermeldungen aktiviert? Deine Header kommen wahrscheinlich gar nicht beim Apachen an.
Und wie bekomme ich das raus?
Normalerweise funktioniert header() - außer wenn die Header bereits abgefahren sind, sprich: wenn schon eine Ausgabe stattfand. Teste das mit dem von ChrisB vorgeschlagenen headers_sent(). Du kannst auch eine Ausgabe provozieren, dann solltest du Fehlermeldungen zu Gesicht bekommen. Zum Probieren, dass die Header grundsätzlich gesendet werden, kannst du text/plain verwenden und das Content-Disposition erstmal weglassen. Dann findet im Browser auch eine Ausgabe statt, bei der du eventuelle Fehlermeldungen sehen solltest. Dass die Ausgabe an der Stelle nicht unterdrückt ist, kannst du über phpinfo() testen (Werte display_errors und error_reporting).
dedlfix.