Lieber francwalter,
header('Content-type: application/x-octet-stream');
header('Content-disposition: attachment; filename=' . $meine_textdatei);echo $meine_textdatei_inhalt;
Wenn ich nun am Anfang dieses PHP-Skriptes eine HTML-Vorlage einbinde
[...]
Was mache ich da wohl falsch?
1.) Du hast beim Testen ERROR_REPORTING nicht auf E_ALL stehen.
2.) Du hast nicht in Dein Fehler-Log geschaut.
3.) Du hast noch nicht realisiert, dass die Funktion header() _vor_ jeglicher Ausgabe von Daten an den Browser aufgerufen werden muss, wenn sie erfolgreich sein soll, denn header() sendet HTTP-Header-Daten, die bekanntermaßen das allererste sein müssen, das zum Browser geschickt wird. Deine "HTML-Vorlage" wird anscheinend als HTML-Code bereits an den Browser ausgegeben worden sein, bevor Dein Script zu der Stelle mit den header()-Aufrufen gelangt...
Lösungsvorschläge:
1.) Jegliche Ausgabe von HTML-Code wird immer schön in eine Variable gespeichert und nicht sofort ausgegeben. Also nix mit überall echo! Nutze dazu die superglobale Variablen $GLOBALS und definiere in ihr (sie ist ein Array) einen Index 'html' oder 'ausgabe', um darin Deinen aktuellen HTML-Code als String abzuspeichern.
Beispiel:
<?php
$GLOBALS['ausgabe'] = '<html>.....<body>';
// "unterwegs"...
$GLOBALS['ausgabe'] .= '<h1>Überschrift</h1>';
// "kurz vor Schluss"...
$GLOBALS['ausgabe'] .= '</body></html>';
// Ende des Scripts
echo $GLOBALS['ausgabe']; // hier endlich doch ein echo
?>
2.) Man kann PHPs output buffer benutzen, um jegliche Ausgabe an den Browser in einen Puffer umzuleiten. Dazu aktiviert man diese Umleitung mit ob_start() und beendet diese am Schluss des eigenen Scripts wieder mit ob_end_flush(), wobei dann aller gepufferter Inhalt an den Browser ausgegeben wird. Unterwegs gibt es noch mehr "ob_"-Funktionen, mit deren Hilfe man das im Puffer Befindliche wieder manipulieren kann.
Beispiel:~~~php
<?php
ob_start();
// komme was wolle
ob_end_flush();
?>
Hier im Forum bin ich schon auf die Meinung gestoßen, dass erstere Methode als "sauberer" empfunden wird, und dass die Notwendigkeit, das output buffering nutzen zu müssen, als Schwäche eines Scripts angesehen wird.
Liebe Grüße aus [Ellwangen](http://www.ellwangen.de/),
Felix Riesterer.
--
ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)