Seite 1 von 1

php Datei inculden

Verfasst: 01.04.2009 22:46
von Swat
Moin ... ich sitze irgendwie in einer Sackgasse.

Folgendes Problem habe ich, ich habe ein Script welches auf mehrere Webseiten bzw. Server eingesetzte wird. Dazu gibt es pro Webseite ein lokales Script welches mittels fopen auf das zentrale zugreift, Parameter übermittelt und eine Ausgabe erstellt. Dies klappt soweit auch ganz gut. ... Bis ich auf die Idee kam dies auch bei phpBB zu nutzen :roll:
Ich bekomme es nicht hin das die Ausgabe des lokalen Scriptes im Template eingebaut wird. Die Ausgabe erfolgt immer über dem Header :-?

Habe es schon vieles durch probiert, dies ist mein derzeitiger Versuch: (ldb.php im root; Vorlage für eingebundene Seiten)

Code: Alles auswählen

[...]
$ldb_inter = include($phpbb_root_path . 'ldb_inter.' . $phpEx);

$template->assign_vars(array(
    'LDBINTER'    => $ldb_inter,
));

// Angabe eurer Content-Seite
$template->set_filenames(array(
    'body' => 'ldb.html')
);
[...] 
in der lbd.html habe ich dazu ein entsprechendes {LDBINTER}
an der Position wo ich es gern hätte zwischen header und footer :wink:

InlineFrame etc geht nicht, da die Höhe der Ausgabe stark schwankt und ich auch kein Fan davon bin.
Mit php im Template kam ich nicht klar ... ging irgendwie auch nach Aktivierung und Cache leeren nicht.

Mein Ziel wäre es die Ausgabe des includes an die gewünschte Stelle zu bekommen und eben nicht gleich zu beginn der Datei/Ausgabe...
Hat da jemand eine Idee?

Danke im Voraus

Re: php Datei inculden

Verfasst: 02.04.2009 14:04
von buegelfalte
Der Include gibt nichts zurück, du kannst also nicht mit $string = include(irgendwas); die Ausgabe, die die "irgendwas"-Datei macht, in einen String umleiten, daher wird die Ausgabe auch immer direkt da passieren, wo du inkludierst. Gedanklich funktioniert das so, daß der Include-Befehl die Anweisungen ausführt, die in der inkludierten Datei stehen, ALS OB sie in der Datei stehen würden, die das Include ausführt. Steht in der inkludierten Datei ein "echo", wird eben ein "echo" ausgeführt.

Wenn du die Ausgabe abgreifen willst, kannst du das hier probieren:

Code: Alles auswählen

ob_start();
include("deine datei");
$output = ob_get_contents();
ob_end_clean(); 
Dadurch wird die Ausgabe unterbrochen und im Puffer gesammelt, durch "ob_get_contents" wird der Puffer, der jetzt die Ausgabe deines Includes enthält, in die Variable $output geschrieben, diese kannst du dann an dein Template übergeben.
Ich kann dir allerdings nicht sagen, wie der Code reagiert, wenn die ganze Seite erst im Puffer gesammelt wird, um dann z.B. komprimiert (Stichwort: gzip) an den Browser übertragen zu werden.


Alternativ: mach doch keine Ausgaben im Include-File sondern fülle einfach eine Variable, so daß du nach dem include direkt eine gefüllte Variable hast, die du weiterverwenden kannst.

Also statt

Code: Alles auswählen

echo 'text';
echo 'mehr text'; 
steht in der include-Datei

Code: Alles auswählen

$output = 'text';
$output .= 'mehr text'; 
Nach dem Inkludieren steht dann alles in der Variable $ouput und kann entweder sofort ausgegeben oder sonstwie weiterverarbeitet werden, dann hast du keine Probleme mit überlappenden Puffern (falls es so etwas gibt, vielleicht ist PHP ja intelligent genug, sowas zu handhaben, keine Ahnung).

B.

Re: php Datei inculden

Verfasst: 02.04.2009 16:50
von Swat
buegelfalte hat geschrieben: Wenn du die Ausgabe abgreifen willst, kannst du das hier probieren:

Code: Alles auswählen

ob_start();
include("deine datei");
$output = ob_get_contents();
ob_end_clean(); 
Dadurch wird die Ausgabe unterbrochen und im Puffer gesammelt, durch "ob_get_contents" wird der Puffer, der jetzt die Ausgabe deines Includes enthält, in die Variable $output geschrieben, diese kannst du dann an dein Template übergeben.
Ich kann dir allerdings nicht sagen, wie der Code reagiert, wenn die ganze Seite erst im Puffer gesammelt wird, um dann z.B. komprimiert (Stichwort: gzip) an den Browser übertragen zu werden.
Danke, das klappt super so. Also konnte keine Probleme feststellen.

Vielen Dank :D