Hallo,
es geht um folgenden Code:
<?php
function parse_file($file)
{
echo"<p>function parse_file: übergebene Datei: $file</p>";
if(empty($file) || !file_exists($file)) { echo"<p>aborted - file $file</p>"; return; }
$handle = fopen ($file, "r");
$filecontent = fread ($handle, filesize ($file));
fclose ($handle);
$filecontent=preg_replace("/\{file:([[:alnum:]]+\.tpl)\}/", parse_file("\\1"), $filecontent);
return $filecontent;
}
function test($var)
{
$var="<p>function test: übergebene datei: <em>$var</em></p>";
return $var;
}
echo parse_file("test.tpl");
?>
Die test.tpl:
Dies ist test.tpl, enthält den Verweis auf test2.tpl
{file:test2.tpl}
Die test2.tpl:
<em>Dies ist test2.tpl</em>
Führe ich das ganze aus, erhalte ich folgende Ausgabe:
function parse_file: übergebene Datei: test.tpl
function parse_file: übergebene Datei: \1
aborted - file \1
Dies ist test.tpl, enthält den Verweis auf test2.tpl
Die 2. und 3. Zeile bzw. eben deren Angabe für $file machen keinen Sinn.
Beachten wir folgende Zeile:
$filecontent=preg_replace("/\{file:([[:alnum:]]+\.tpl)\}/", parse_file("\\1"), $filecontent);
Ok, evtl. etwas falsch an parse_file("\1") dachte ich mir, aber dann habe ich parse_file("\1") durch test("\1") ersetzt – der einzige Unterschied ist der Funktionsname (d.h. keine der beiden funktion ändert die übergebene Variable vor der Ausgabe ab!), aber hier erhalte ich nun eine sinnvolle Ausgabe für $file. Die gesamte Ausgabe (parse_file("\1") durch test("\1") ersetzt):
function parse_file: übergebene datei: test.tpl
Dies ist test.tpl, enthält den Verweis auf test2.tpl
function test: übergebene datei: test2.tpl
Ich habe jetzt schon ne ganze weile gesucht, aber ich verstehe einfach nicht, was ich falsch mache?
Vielen Dank schonmal für eure Hilfe!