Teilweises auslesen/ausgeben von includierten Dateien

Hallo NG,

ich habe folgendes Problem. Ich moechte
eine includierte Teildatei nur teilweise
in einen Puffer schreiben, um dann diesen
abgaendert Anzuzeigen.

Als Markierung soll ein HTML-Kommentar
dienen. Also z.B. ein <!-- PSTART --> und
ein <!-- PENDE --> in der Datei "hello.php"

ich habe nun folgenden Code der mir
allerdings noch die gesamte Seite in
den Puffer schreibt...

---snip---
<?php
include( 'newheader.php' );
ob_start();
include( 'hello.php' );
$sub = ob_get_contents();
ob_end_clean();
include( 'ersetze.php' );
foreach( $n as $k => $v ) {
$sub = str_replace( $k, $v, $sub );
}
print( $sub );
include( 'newfooter.php' );
?>

---snap---

Beispiel "hello.php"

---snip---
<html>
<head>
[...diverse Angaben/Text/Tags...]
</head>
<body>
[...diverse Angaben/Text/Tags...]
<!-- PSTART -->

<h2>Hallo Welt... und mehr...</h2>
<p>
Beispieltext
</p>

<!-- PENDE -->
[...diverse Angaben/Text/Tags...]
</body>
</html>
---snap---

I Prinzip also "Header" und "Footer"
wegwerfen und dann einen anderen hinzufuegen...

Hat da jemand eine Idee? Ich denke wohl
gerade zuviel von hinten durch die Brust und
komme nicht weiter...

Thomas
Thomas Steinbach [ Do, 15 November 2007 15:28 ] [ ID #1871712 ]

Re: Teilweises auslesen/ausgeben von includierten Dateien

Thomas Steinbach schrieb:
> Hallo NG,
>
> ich habe folgendes Problem. Ich moechte
> eine includierte Teildatei nur teilweise
> in einen Puffer schreiben, um dann diesen
> abgaendert Anzuzeigen.
>
> Als Markierung soll ein HTML-Kommentar
> dienen. Also z.B. ein <!-- PSTART --> und
> ein <!-- PENDE --> in der Datei "hello.php"
>
> ich habe nun folgenden Code der mir
> allerdings noch die gesamte Seite in
> den Puffer schreibt...

die Datei in einen String lesen und per "substr" und "strpos"
zurechtschneiden wäre meine Idee zu dem Thema.

Aber warum hast in der Datei dann Header und Footer enthalten, wenn dies
eh nicht brauchst?

--
Mit freundlichen Grüßen,
Christoph Herrmann

http://dragonprojects.de/
Christoph Herrmann [ Do, 15 November 2007 15:51 ] [ ID #1871714 ]

Re: Teilweises auslesen/ausgeben von includierten Dateien

Thomas Steinbach schrieb:

> Ich moechte
> eine includierte Teildatei nur teilweise
> in einen Puffer schreiben

Bahnhof ...

> Als Markierung soll ein HTML-Kommentar
> dienen. Also z.B. ein <!-- PSTART --> und
> ein <!-- PENDE --> in der Datei "hello.php"

Dann lass Dir doch einfach die Positionen dieser Strings zurückgeben und
schneide den String dann zurecht.

> ob_start();
> include( 'hello.php' );
> $sub = ob_get_contents();
> ob_end_clean();

Damit packst Du nicht die Datei in den Puffer, sondern die Ausgaben, die
diese Datei erzeugt.

> foreach( $n as $k => $v ) {
> $sub = str_replace( $k, $v, $sub );
> }

Die Schleife kannst Du Dir sparen:

$sub = str_replace(array_keys($n), $n, $sub);

Gruß. Claus
Claus Reibenstein [ Do, 15 November 2007 16:11 ] [ ID #1871719 ]

Re: Teilweises auslesen/ausgeben von includierten Dateien

Thomas Steinbach schrieb:
> Hallo NG,
>
> ich habe folgendes Problem. Ich moechte
> eine includierte Teildatei nur teilweise
> in einen Puffer schreiben, um dann diesen
> abgaendert Anzuzeigen.
>
> Als Markierung soll ein HTML-Kommentar
> dienen. Also z.B. ein <!-- PSTART --> und
> ein <!-- PENDE --> in der Datei "hello.php"
>
> ich habe nun folgenden Code der mir
> allerdings noch die gesamte Seite in
> den Puffer schreibt...
>
> ---snip---
> <?php
> include( 'newheader.php' );
> ob_start();
> include( 'hello.php' );

Enthaelt hello.php PHP Code oder nur Markup? Wenn letzteres dann lese
den Inhalt der Datei einfach per file_get_contents() in eine Variable
ein und benutze preg_match() um den Inhalt zwischen deinen Markern
zugreifen.

[..]

> I Prinzip also "Header" und "Footer"
> wegwerfen und dann einen anderen hinzufuegen...
>
> Hat da jemand eine Idee? Ich denke wohl
> gerade zuviel von hinten durch die Brust und
> komme nicht weiter...

Magst du dir nicht mal angucken wie und was eine Templateengine[1]
macht? Weil das ist eigentlich das was du suchst... und fast schon genau =

so arbeitet ;)

[1] Sigma, Pear_HTML_Template (oder wie immer da die phplib
Templateengine heist) und zum Schluss die eierlegende Vollmilchsau
namens "Smarty".


Gruss
Joerg

--
TakeNet GmbH, Geschaeftsfuehrer Wolfgang Meier
97080 Wuerzburg Tel: +49 931 903-2243
Alfred-Nobel-Straße 20 Fax: +49 931 903-3025
HRB Wuerzburg 6940 http://www.takenet.de
Joerg Behrens [ Do, 15 November 2007 16:20 ] [ ID #1871721 ]

Re: Teilweises auslesen/ausgeben von includierten Dateien

Hallo Christoph,

> die Datei in einen String lesen und per "substr" und "strpos"
> zurechtschneiden wäre meine Idee zu dem Thema.
ja, das muss ich nochmal pruefen...
Blokade ist erstmal wieder weg. Danke.

> Aber warum hast in der Datei dann Header und Footer
> enthalten, wenn dies eh nicht brauchst?

Es geht um einen Anpassung einer bestehenden
Webseite. Da soll konzeptionell etwas umgestellt
werden, aber das wirkt sich auf "einen" Teil
der Scripte/Webseiten aus und dort muesste ich
jetzt filtern... vorher bekam ich nur den Inhalt.
jetzt kommt fuer die gleichen Scripte aber die
komplette Seite... Das will ich einfach anpassen.

Thomas
Thomas Steinbach [ Do, 15 November 2007 23:17 ] [ ID #1871738 ]

Re: Teilweises auslesen/ausgeben von includierten Dateien

Hallo Joerg,

> ---snip---
> <?php
> include( 'newheader.php' );
> ob_start();
> include( 'hello.php' );

Enthaelt hello.php PHP Code oder nur Markup? Wenn letzteres dann lese
den Inhalt der Datei einfach per file_get_contents() in eine Variable
ein und benutze preg_match() um den Inhalt zwischen deinen Markern
zugreifen.

php und Markup...
aber muesste ja auch gehen - oder?
btw: bin nur Gelegenheits-PHP-ler... :-)

[...]

>> I Prinzip also "Header" und "Footer"
>> wegwerfen und dann einen anderen hinzufuegen...
>>
>> Hat da jemand eine Idee? Ich denke wohl
>> gerade zuviel von hinten durch die Brust und
>> komme nicht weiter...

> Magst du dir nicht mal angucken wie und was eine
> Templateengine[1] macht? Weil das ist eigentlich
> das was du suchst... und fast schon genau so
> arbeitet ;)

Ich galube dazu wende ich PHP momentan zu selten an.
Die Webseite habe ich vor ca. eineinhalb Jahren mal
gemacht und bin jetzt nur was am umstellen...

[1] Sigma, Pear_HTML_Template (oder wie immer da die phplib
Templateengine heist) und zum Schluss die eierlegende Vollmilchsau
namens "Smarty".

Klingt interessant und koennte es sein.
Bei Zeiten - ohjeh, wann habe ich die ;-)
werde ich mich mal damit auseindandersetzen...
Danke fuer den Tip mit der Template-Engine.


Thomas
Thomas Steinbach [ Do, 15 November 2007 23:23 ] [ ID #1871739 ]

Re: Teilweises auslesen/ausgeben von includierten Dateien

Hallo Claus,

danke schonmal fuer die Hinweise. Die
Blokade ist halbwegs weg... aber: ;-)

>> Ich moechte
>> eine includierte Teildatei nur teilweise
>> in einen Puffer schreiben
>> Als Markierung soll ein HTML-Kommentar
>> dienen. Also z.B. ein <!-- PSTART --> und
>> ein <!-- PENDE --> in der Datei "hello.php"
>
> Dann lass Dir doch einfach die Positionen dieser Strings zurückgeben > und
> schneide den String dann zurecht.

mit pos habe ich es noch nicht probiert,
aber im Prinzip gibt mir die Funktion strstr()
das erwuenschte Resultat, mit der Ausnahme, das
beim zweiten String nichts mehr im String
drin steht. Warum?

Folgender Code liefert eine Seite
(abgecschnittner output von "hello.php")
Aber nur in $sub1 und in $sub2 ist nichts
mehr vorhanden...

<?php
$pbegin='<!-- PBEGIN -->';
$pend='<!-- PEND -->';
ob_start();
include( 'hello.php' );
$sub = ob_get_contents();
ob_end_clean();
$sub1 = strstr( $sub, $pbegin );
print( "out1:".$sub1 ); // funkt,
// also noch den Rest abschneiden
$sub2 = strstr( $sub1, $pend, true );
print( "out2:".$sub2 ); // leer! :-(
?>

laut doku liefert strstr den String vom
Vorkommen des Patterns "<!-- PBEGIN -->"
bis zum Ende und bei gesetztem true,
vom Anfang bis Pattern "<!-- PEND -->"

Also muesste doch in sub2 das gewuenschte
Ergebnis liegen - nicht? Also vom
Output der seite "hello.php" und da von
<!-- PBEGIN --> bis <!-- PEND -->
Rest fliegt raus...

Leider ist bei "$sub2" nichts mehr im
String... Schreibweisen habe ich jetzt
mehrfach ueberprueft. Blicke aber irgendwas
noch nicht und bin kein regelmaessiger
PHP Anwender. Uebersehe ich da was beim
Speicherplatz oder ueberschreibe ich
irgendwo eine Variable? ...

>> ob_start();
>> include( 'hello.php' );
>> $sub = ob_get_contents();
>> ob_end_clean();
>
> Damit packst Du nicht die Datei in den Puffer, sondern die Ausgaben, > die
> diese Datei erzeugt.

Ja, das meinte ich auch urspruenglich.
In der Ausgabe von dieser datei habe ich diese
zwei Strings. Wobei ab dem "$sub2" ebend
nichts mehr vom String uebrig ist ist...

Was uebersehe ich hier noch?

>> foreach( $n as $k => $v ) {
>> $sub = str_replace( $k, $v, $sub );
>> }
> Die Schleife kannst Du Dir sparen:
> $sub = str_replace(array_keys($n), $n, $sub);
danke, ja das werde ich noch probieren :-)


Thomas
Thomas Steinbach [ Do, 15 November 2007 23:11 ] [ ID #1871740 ]

Re: Teilweises auslesen/ausgeben von includierten Dateien

Thomas Steinbach schrieb:
> Hallo Joerg,
>
>> ---snip---
>> <?php
>> include( 'newheader.php' );
>> ob_start();
>> include( 'hello.php' );
>
> Enthaelt hello.php PHP Code oder nur Markup? Wenn letzteres dann lese
> den Inhalt der Datei einfach per file_get_contents() in eine Variable
> ein und benutze preg_match() um den Inhalt zwischen deinen Markern
> zugreifen.
>
> php und Markup...
> aber muesste ja auch gehen - oder?

Nein, nur bei include*/require* wird auch der PHP Code ausgefuehrt. Das
heist nur must bei deinem ob_start() Würgaround bleiben und den Buffer =

dann ausbleiben um dadrauf dann preg_match() ubenutzen.

Gruss
Joerg

--
TakeNet GmbH, Geschaeftsfuehrer Wolfgang Meier
97080 Wuerzburg Tel: +49 931 903-2243
Alfred-Nobel-Straße 20 Fax: +49 931 903-3025
HRB Wuerzburg 6940 http://www.takenet.de
Joerg Behrens [ Fr, 16 November 2007 11:27 ] [ ID #1872718 ]
PHP » de.comp.lang.php.misc » Teilweises auslesen/ausgeben von includierten Dateien

Vorheriges Thema: Composite-Objekte klonen (PHP5)
Nächstes Thema: Skript terminiert unerwartet