Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[PHP] includeInhalt als String

Empfohlene Antworten

Hi und hallo,

ich müsste Den Inhalt einer PHP-Include Datei in eine Variable packen.

Der Witz dabei ist, dass der Inhalt der Datei aber zuerst "ausgeführt", also durch den PHP Parser gelaufen sein muss und nur der erzeugte HTML-Text in der Variablen gespeichert wird.

in etwa so:


function returnIncludeInhalt(){

    $retVal = [EXECUTE??][include("inc/meinInclude.inc.php")];

}

Nehmen wir an in der Include Datei steht nur

<?php

    echo("OK");

?>

Dann soll $retVal einfach nur "OK" enthalten.

Geht das? Ich komm im Moment nicht drauf...

Hi,

versuchs mal mit fopen.

PHP: fopen - Manual

Gruß Jaraz

Ja, das hatte ich anfangs auch. Aber ich finde keine Einstellung mit der der Inhalt der Datei noch geparst wird. Ich möchte ja nicht den reinen text der Datei, sondern den durch den PHP Parser gelaufenen.

Oder überseh ich was?

... sondern den durch den PHP Parser gelaufenen.

Oder überseh ich was?

Dann ruf die Datei nicht aus dem Dateisystem auf, sondern über den Server.

Also


$file = file_get_contents('http://localhost/include.php');
[/php]

Dazu muss allerdings allow_url_fopen aktiviert sein in der ini.

PHP: file_get_contents - Manual

EDIT:

oder du kannst es über cli aufrufen, wenn das geht, also

[php]
$file = system("php /path/to/file.php");

Ui! Cool! Das geht.

Aber jetzt wirds kompliziert.

In meiner Include Datei greife ich auf globale Funktionen zu.

Normalerweise funktioniert das, da mein Aufbau folgender ist:


HAUPTDATEI

    ->includiert globale funktionen

    ->includiert kontaktFormular (greift auf globale funktionen zu)

Wenn ich das nun via

file_get_contents('http://localhost/includes/kontaktform.php');

mache, erzeugt das den Fehler, dass dem kontaktform.php Include die globalen Funtionen fehlen (ist ja klar).

Kann ich da noch was tun? Oder muss ich meine Idee begraben?

Ok Problem gelöst. Ich werde einfach in jede meiner Template Dateien einen check auf eine vorhanden globala Variable einbauen.

Und wenn dieser Check fehl schlägt, dann includiere ich einfach meine globalen Funktionen.

Vielen Dank!

Du kannst ja auch gleich anstelle von include() include_once() benutzen. Das nimmt die notwendigen Überprüfugen schon vor. Das gleiche gibt es auch mit require().

Nur so als Info für das nächste Mal.

Hmm hab noch weiter gemacht, aber komme nicht zum gewünschten Ergebnis.

Hier mal ein Codefragment


class pageContent{

var $content; //THE PAGE CONTENT
var $templateC; //CONTENT TEMPLATE
var $retVal = "";

function pageContent($contentFile){
$this->content = returnFileContent($contentFile);
$pattern = "/<CT:([0-9A-Za-z_]*)>.*/s";
$this->templateC = preg_replace($pattern, "$1", $this->content);
if(substr($this->templateC, 0, 3) == "ST_"){
$this->retVal.= "<div>";
$this->retVal.= file_get_contents("http://localhost/".strtolower("inc/templates/".$this->templateC).".inc.php");
$this->retVal.= "</div>";
}else{
$this->getLayoutAndOutputContent();
}
}
[/PHP]

Was passiert:

Ich erstelle beim Aufruf meiner Seite aus der pageContent Klasse ein Object. Dieses Objekt bekommt, wie auch immer, ein contentFile übergeben.

In diesem Contentfile steht zuerst einmal das Template für den Content, und natürlich sein Content

z.b.

[code] <CT:1SPALTEN> ### SPALTE1 ### My content here spalte 1 <h1>und mal ne Headline</h1> ja, das ist ganz schlank und für manche ansprüche genügend ### SPALTE1 ### . . [/code]

In diesem Fall ein 1 spaltiges Layout und sein Content

Es soll aber auch Seiten geben, die von mir Vorgefertigte Module einbinden.

Z.b. Habe ich ein komplettes Kontaktformular mit Validierung und E-Mail Versand etc.

Dazu ist die if-Abfrage if(substr($this->templateC, 0, 3) == "ST_"){ in der pageContent Funktion.

Wenn also ein spezielles Template gewünscht wird, soll dieses eingebunden werden.

Im Moment arbeite ich mit einer Variable "retVal" die dann per file_get_content das gerenderte Template als Inhalt bekommt.

Leider leider kennt die Datei dann aber weder meine globalen Stylesheets, noch Javascripte etc.

Is ja klar, da in der Include Datei diese Angaben gar nicht drinstehen.

Ich kann an dieser stelle aber auch nicht mit include include_once oder require arbeiten, da ich mir der Inhalt meiner kompletten Seite ja zuerst nach und nach zusammenbaue.

z.b. wird nach dem PageContent noch die Seitennavigation zusammengebaut und erst wenn alles fertig ist, Erfolg über andere Funktionen und KLassen die Ausgabe meiner kompletten Seite.

Wenn ich an dieser Stelle includieren würde, würde der Content somit an der falschen Stelle erscheinen.

Wie schaffe ich es also, dass meine "include-Datei" (ist sie ja hier nicht) auch meine Globalen Stylesheets Javascripts und php Funktionen kennt?

Vielen Dank für jeden der da nen Tipp hat.

Wie schaffe ich es also, dass meine "include-Datei" (ist sie ja hier nicht) auch meine Globalen Stylesheets Javascripts und php Funktionen kennt?

Auch wenn ich den kompletten Sinn nicht ganz verstehe (oder wenn das eine Art CMS sein soll das mächtig kompliziert finde):

Stylesheets und Javascripts kennt deine Include-Datei gar nicht. Weil sie nur auf der Serverseite eine Include-Datei ist und die genannten Dinge erst auf der Clientseite eine Rolle spielen.

Zu den php-Funktionen: include zusammen mit OutputBuffering

EDIT:

Oder besser: Include, aber deine Module so aufbauen, dass die Ausgabe nicht per Echo o.ä. erfolgt, sondern die Ausgabe in einen String geschieht, der dann abgefragt werden kann von der Hauptfunktion.

Beispielhaft:


$this->retVal.= "<div>";
include($modulName.".inc.php");
$this->mod = new "T".$modulName;
$this->retVal.= $this->mod->getOutput;
$this->retVal.= "</div>";
[/php]

Au ja! Das ist ne gute Idee und ich werd´s so machen.

Ja, das soll eine Art CMS sein. Im Endeffekt aber nur für mich selbst. Wir haben sehr viele Kundenseiten, die ganz einfach gestrickt sind. Und bevor ich da ein überladenes CMS nehme, hab ich mir was ganz kleines und einfaches geschrieben.

Eine XML-Datei, die die Navigation beinhaltet.

Und für jede Seite eine einfache Datei, die in der ersten Zeile ihr Template und dann den Content als ganz einfachen Plaintext mit ein paar Möglichkeiten der Auszeichnug enthält.

Ich finds ganz smart... Noch ;)

Vielen Dank

Hi,

ich würde es so machen:


<?php
$file = 'abc.php'
ob_start();
include($file);
$content = ob_get_contents();
ob_end_clean();
?>
[/PHP]

Eine Alternative würdest du evtl noch mit PHP: eval - Manual hinbekommen.

Gruß,

Markus

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.