Tom: Download Link

Beitrag lesen

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

--
Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de