Wenn ich mir mittels print_r(Heiders_list()) anzeigen lassen, welche Header an den Client geschickt werden sollen, erscheint der Content-Type richtig:
[4] => Content-Type: application/zipWenn ich die Ausgabe nun aber wieder unterdrücke, wird wieder HTML als Mime-Type angezeigt.
Vielleicht habe ich dich falsch verstanden, aber das eine hat mit dem anderen erstmal nichts zu tun. print_r(headers_list()) gibt aus, was PHP zu senden gedenkt. Das muss aber nicht zwangsläufig das sein, was der Browser empfängt, denn dazwischen hängt mindestens der Webserver.
Wie dem auch sei, bei solchen unerklärlichen Geschichten ist es ratsam, ganz von vorne anzufangen. Erstelle eine neue PHP-Datei header.php mit folgendem Inhalt:
<?php
header("Content-Type: bla/fasel");
?>
Blafasel
In diesem Skript ist nur das Allernötigste drin, um das Problem einzugrenzen. Rufe es mit wget --server-response --output-document=- http://dein.example.com/header.php auf.
Kommt was anderes als
HTTP/1.1 200 OK
Content-Type: bla/fasel
[weitere Daten]
Blafasel
wende dich an deinen Hoster. Funktioniert's hingegen, baue das Testskript Schritt für Schritt zum Ziel aus. Schreibe erst HTML-Code statt Blafasel. Bleibt es bei bla/fasel, ändere die Content-Type-Zeile in application/zip. Empfängst du application/zip, sende eine Datei (vorher --output-document entfernen). Und so weiter.