Von phpskript php output in variable speichern

Briefkasten

Erfahrenes Mitglied
Hallo,

ich habe ein template system. Der Inhalt wird aus einer DB geladen. Leider ist die Seite bzw. der Content statisch. D.h wenn ich eine Bildergallerie haben möchte muss ich den gesamten html Code in die DB speichern. Das ist unpraktisch und nicht dynamisch. Deshalb habe ich mir ein Gallery skript geschrieben. Das Problem ist nun, wie ich diesen dynamischen Code in mein template System reinbekomme.

Würde ich den php Code in die DB speichern würde dieser als html Code angesehen werden. Ist ja klar.

Ich hab mir gedacht am besten wäre es wenn man in die DB z.B include("gallery.php"); speichern würde. Danach erkennt das template System das es sich um dynamischen code handelt und geht wie folgt vor:

arbeitet das gallery.php skript ab. Speichert den erzeugten Code in eine Variable ( und setzt anstatt des Platzhalters die neue Variable. was eigentlich sowieso die template engine übernimmt)

Nun wollte ich fragen ob es eine solche funktion in php gibt, bei der ich den output eines skriptes speichern kann. Hab mir das so vorgestellt:

string = OutputvonPHPskript("gallery.php");

Gibts sowas in der Art? Ist das überhaupt möglich das oben genannte so zu realisieren oder gibt es eine bessere Lösung? Ich hoffe ich habe es verständlich erklärt.

mfg Briefkasten
 
Ja: file_get_contents():
PHP:
$str = file_get_contents("http://.../gallery.php");

Mit dieser Funktion kann ich die Datei nur einlesen. Ich möchte aber das die Datei davor abgearbeitet wird. Zum Beispiel:

ich lese mit der funktion diese php datei ein welche folgenden Inhalt hat:

PHP:
<?php
    include ("../../head.php");
    


    echo "<form name='form1' method='post' action='check.php' enctype='multipart/form-data'>";
    for ($i=0; $i < $_POST['anzahlderbilder']; $i++)
    {
      echo "<input type='file' name='imagefile[]'><br/>";
    }
    echo "<input type='submit' name='Submit' value='Submit'>";
    mkdir ("$Albumname", 0777); 
    echo "<input type='hidden' name='Albumname' value='" . $_POST['Albumname'] . "' />";
    echo "<input type='hidden' name='anzahlbilder' value='" . $_POST['anzahlderbilder'] . "' />";
    echo "</form>";
    
?>

Deine Funktion würde mir den Inhalt der Datei liefern. Ich möchte aber nur das Ergebniss.

Nämlich dieses:

PHP:
...
</head>
<form name='form1' method='post' action='check.php' enctype='multipart/form-data'><input type='file' name='imagefile[]'><br/><input type='file' name='imagefile[]'><br/><input type='submit' name='Submit' value='Submit'><input type='hidden' name='Albumname' value='asdf' /><input type='hidden' name='anzahlbilder' value='2' /></form></body>
</html>

Gibt es eine solche Funktion und ist dies realisierbar?

mfg Briefkasten
 
Hallo,

ich verwende das http://www.tutorials.de/forum/php-tutorials/23173-template-parser-anfaenger.html Template. Habe die Funktion eval auch gerade gefunden. Diese Funktion muss ich höchst wahrscheinlich direkt in die parser Klasse einbauen.

Verstehe den Code noch nicht ganz. Hab deshalb ein paar Kommentare hinzugefügt.

PHP:
function parser($template, $_array)
	{
		//variable Wert zuweisen
		$this->template = $template;
		//liest template.html file ein und gibt einen[] zurück
		$this->temp_content = file($this->template);
		$this->rplc($_array);
		//Gibt einen String mit einer String-Repräsentation aller Array-Elemente in der gleichen Reihenfolge
		//wie in dem Array zurück, bei dem die einzelnen Array-Elemente mit dem im Parameter glue angegebenen
		//String verbunden werden. 
		echo(implode("", $this->temp_content));
	}
	function parserphp($template, $_array)
	{
		//Todo

	}
	function rplc($_array)
	{
		foreach($_array as $key => $value)
		{
			//strtoupper -- Setzt einen String in Großbuchstaben um
			//preg_replace -- Sucht und ersetzt einen regulären Ausdruck
			//mixed preg_replace ( mixed Suchmuster, mixed Ersatz, mixed Zeichenkette [, int Limit [, int &Anzahl]] )
			//$regex[var_name] : {VARIABLE}
						$regex['var_name'] = "#{[[:space:]]*?(".strtoupper($key)."){1,}?[[:space:]]*?}#si";
			$this->temp_content = preg_replace($regex['var_name'], $value, $this->temp_content);
		}
	}

Wenn ich richtig liege muss ich in der Zeile

PHP:
			$this->temp_content = preg_replace($regex['var_name'], $value, $this->temp_content);

statt dem Value das eval() einbauen. Noch eine Frage habe ich zu $this->rplc($_array); Warum muss das this-> davor. Warum funktioniert es ohne this-> nicht?

In der index.php habe ich derzeit folgendes: Nach dem ich aber die Funktion eval() gefunden habe muss ich diese aber wahrscheinlich direkt in die Template Klasse einbauen.

PHP:
...

//Davor kommen noch die ganzen Abfragen etc.

if(substr($text,0,9)=='include("')
{
	$text = explode("include(\"", $text);
	$filename = explode("\");",$text[1]);
	if(!file_exists($filename[0]))
		echo "Fehler die Datei exestiert nicht! "+$filename[0];
	else
	{
		$str = file_get_contents($filename[0]);
		eval($str);
		echo $str;
	}

}
else
{
//aufrufen wenn es sich um statischen text handelt
	//Initialisierung der Klasse und Parsen des Templates
	$tpl = new parser($template, $_array);
}

...

Bin ich auf dem richtigem weg?
 
Zurück