Moin,
header("Content-type: application/force-download");
diesen Content-Type gibt es nicht - meintest du vielleicht application/octet-stream? Die HTTP-Spezifikation sagt zwar aus, dass ein Client bei einem ihm unbekannten Content-Type selbst entscheiden kann, wie er die Ressource verarbeitet, und die meisten UAs werden sie wohl zum Speichern anbieten. Aber warum nicht gleich richtig?
header("Content-Disposition: filename=$Datei");
Da fehlt was: Content-Disposition: attachment; filename=$Datei
header("Content-Description: Downloaded File");
Kann man machen, ist aber sehr ungewöhnlich. Ich würd's weglassen.
readfile ($dir2.$Datei);
wenn ich es so mache, dann werden nur undefinierte Zeichen auf den Bildschirm ausgegeben.
Macht dein Script etwa vor den header-Anweisungen schon irgendeine Ausgabe, und sei es eine Leerzeile? Das würde dann dazu führen, dass keine Header mehr gesendet werden. Dann solltest du allerdings auch eine Meldung (Warning) bekommen: Headers already sent.
So long,
Martin
Lieber blau machen, als sich schwarz ärgern.