Hi!
Wenn Du also http://knet-systems.de/tmp/header.php?wasweisich=x.xls schreibst, dann sollte es auch mit dem IE gehen.
Ich würde übrigens sicherheitshalber http://knet-systems.de/tmp/header.xls schreiben und meinen Server entsprechend konfigurieren. Wer weiß, ob der nächste IE etwas "intelligenter"[tm] wird und tatsächlich zwischen Local- und Searchpart unterscheidet ... jiargl ... :-/
das ist auch meien Befürchtung, glücklicherweise wird die nächste Version aber wohl noch bis zur nächsten Windows-Version auf sich warten lassen, und das dauert AFAIK noch was, und dan dauert es nochwas bis Firmen sowas verwenden, die meisten verwenden ja nichtmal Windows 2000.
Den Content-Type und die Content-Disposion würde ich trotzdem setzen, damit richtige HTTP-Clients auch richtig bedient werden.
Wenn das den IE nicht stört...Nach meiner Erfahrung macht der IE gerade im Hinblick auf die Content-Disposition _ziemlich_ großen Schwachsinn - allerdings abhängig zu dem, was er für die Dateiendung hält (.pl-Ressource mit application/octet-stream und einer Content-Disposition: der IE versucht, den Response in einen zufällig installierten Perl-Interpreter zu jagen). Umso dringlicher der Rat, die URL ohne Searchpart auf .xls enden zu lassen.
Oder sollte ich lieber das Script in .xls umbenennen und .xls durch den PHP-Interpreter schicken, normales Excel liefere ich eh nicht aus.
Dennoch würde ich mich bemühen, eine individuellere Konfiguration herzustellen, damit andere .xls-Ressourcen nicht betroffen sind. Beispielsweise könntest Du über mod_rewrite die .xls-URL auf eine .php-Datei schicken.
Ich habe eine Rewrite-Rule die _alle_ Requests(außer Grafiken...) an ein und dassselbe PHP-Script schickt, und ich habe das ganze so wie beschrieben aufgebaut, dass dann automatisch über include das entsprechende PHP-Script geladen wird.
Diese Struktur muss ich so beibehalten weil die ganze Anwendung drauf basiert, und ich will nach Möglichkeit nicht dieses Script ändern. Und da liegt das problem mit der ID - wo bringe ich die unter?
dieselbe Tabelle die in Excel vorliegt gebe ich z.B. auch in HTML aus, dann sieht das so aus:
GET /write_html?id=123
REWRITE-> GET /mein_script.php?req=write_html&id=123
in mein_script.php passiert dann das:
include($_GET['req'].'.php');
es wird also das Script write_html.php eingebunden.
Im Script write_html.php steht dann
$meine_id = $_GET['id'];
$sql = 'SELECT... WHERE id = $meine_id';
$db->query($sql);
... und dann wird eine HTML-Tabelle erzeugt und ausgeben.
Bei Excel sol im prinzip dasselbe passieren, mit dem Unterschied dass nicht HTML sondern binäres Excel erzeugt, gespeichert und ausgegeben wird, was ja inzwischen auch funktioniert, nur fehlt mir jetzt nich eine gute Methode die id im Request-String unterzubringen ohne mein_script.php ändern zu müssen, und trotzdem einen Request-String zu haben den der IE halt 'korrekt' interpretiert.
Mit einem extra Paramater wäre es ja OK:
GET /write_excel?id=123&file=dummy.xls
REWRITE-> GET /mein_script.php?req=write_excel&id=123&file=dummy.xls
in mein_script.php passiert dann wieder das:
include($_GET['req'].'.php');
es wird also das Script write_excel.php eingebunden.
dem Script write_excel.php steht dann wieder folgender Parameter zu Verfügung:
$my_id = $_GET['id'];
Und alle sind Glücklich - halt bis auf den Einwand von Dir oben, dass der IE ja auch 'dazulernen' könnte und das ganze schon wieder nicht funktioniert, nur wäre das ja auch kein Schritt nach vorne, wenn schon sollen die gefälligst dem Contend-Type vertrauen und nicht der Endung!!!
Aber wem sag ich das... ;-)
nur fehlt dann die ID, die entscheidend ist _welche_ excel-Datei erzeugt werden soll, und wenn ich die als Parameter anhänge wird das wohl wieder nicht gehen,
Doch, Du musst diese nur entsprechend beachten.
Ja, aber wie? Wo bringe ich sie sonst unter? Entweder als Parameter, dann kann es sein dass es in Zukunft evtl. nicht merh geht, oder davor, dann müsste ich meine wichtigsten Scripte ändern, was Auswirkunegn auf jeden einzelnen Request haben wird. Sicher würde das gehen, nur gehört das eigentlich nicht da hin. Da müsste ich dann halt ne Sonderregel schaffen, für den Fall dass die Recource auf .xls endet...
Ah - ich weiß was ich mache! Getreu dem Motto "doppelt gemoppelt hält besser werde ich so einen Request verwenden:
GET /write_excel.xls?id=123&file=dummy.xls
REWRITE-> GET /mein_script.xls.php?req=write_excel&id=123&file=dummy.xls
in mein_script.php passiert dann wieder das:
include($_GET['req'].'.php');
es wird also das Script write_excel.xls.php eingebunden.
dem Script write_excel.xls.php steht dann auch wieder folgender Parameter zu Verfügung:
$my_id = $_GET['id'];
So werde ich es glaube ich machen! Viele Probleme lösen sich beim schreiben... aber ich schicke es trotzdem ab ;-)
Vielen Dank Euch beiden!
Grüße
Andreas