Hello,
nya sinnlos dann irgentwie vorher readfile zu haben wenn man danach nen header einbaut der eine datei zum download anbietet:) entweder das oder das eine..schätze ich mal..oder..
nicht in jedem Fall.
Stell Dir das mal so vor:
Der Webserver übergibt das gesamte Script an den PHP-Parser, weil er über seine Konfiguration dazu veranlasst wurde. Normalerweise ist das die Endung *.php, die ihn dazu veranlasst.
Jetzt fängt er an zu lesen und alles, was ihn nicht weiter für seine Auswertung interessiert, füllt er sofort in seinen großes Ausgangsrohr, schön soertiert, der Reihe nach in der er das gelsesen hat.
Erst, wenn er auf einen PHP-Bereich stößt, der im Allgemeinen duch <?php gestartet wird, fängt er an zu schwitzen. Nun wertet er die Literale als Statements aus und gibt füllt nur noch in das Ausganmgsrohr, was durch echo, print, readfile() und sonstige Ausgabeanweisungen erzeugt wurde. Dir übrigen Ergebnisse behält er vielleicht in Variablen oder schmeißt sie gleich weg, weil der Programmierer ihn sinnlos (aber nicth umsonst!) hat arbeiten lassen.
Am Scriptende schmeißt er dann auch die Variablen weg.
Bei Normaleinstellung des Parsers wird alles, was sich im Rohr befindet, auch sofort an den Webserver zurückgeleitet, der es dann nach seinem Gutdünken zum Client schickt.
Fängt man aber nun so ein Script sofort mit einem <?php an, dann fängt auch der Parser sofort an zu schwitzen. Man kann ihm dann gleich als erstes die Anweisung geben, das Rohr doch an der Seite zum Webserver zu verschließen, also zu verhindern, nichts direkt auszugeben. Das machst Du mit
ob_start() http://de2.php.net/manual/en/function.ob-start.php
Nun kann man auch mit echo, print, readfile un Consorten fleißig Ausgaben produzieren, ohne diese gleich an den Websewrver weiterleiten zu lassen. Wenn dann noch ein Header benötigt ist, kann der immer noch vorne vor dem Ausgaberohr davormontiert werden vom Parser, auch ohne direkt beim Webserver zu landen.
Wenn dann am Ende des Scriptes die gesamte Ausgabe auf einmal ausgelöst wird, sitzen die Header in der passenden Sortierung an der richtigen Stelle und die Daten folgen erst anschließend, so wie es der Client erwartet.
Aber schau Dir sinnvollerweise auch nochmal Funktionen, wie
file_get_contents() http://de2.php.net/manual/en/function.file-get-contents.php
und
fread() http://de2.php.net/manual/en/function.fread.php
an oder sogar die Stream-Funktionen
http://de2.php.net/manual/en/streamwrapper.stream-read.php
http://de2.php.net/manual/en/book.stream.php
Mit diesen kannst Du den Dateiinhalt erst in eine Variable odre Eigenschaft befördern, dort aufbewahren und manipulieren und selber entscheiden, wann sie in den Ausgabestrom (Dein "Rohr") überführt werden sollen.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg