PHP PHP-Code aus Datei filtern

jopjip

Ensign
Registriert
Juni 2008
Beiträge
233
Hi,
ich würde gerne den PHP Code aus einer PHP-Datei filtern, das klappt nur nicht richtig, ka warum. Schaut euch mal bitte folgenden Code an:
PHP:
<?php
if(is_readable('kontakt.php'))
{
    $content = file_get_contents('kontakt.php');
    $content = explode("\n",$content);
    $i = (int) 0;
    $e = (int) 0;
    $count = count($content);
    do
    {
//Prüft, ob das PHP skript anfängt
        if($content[$i]="<?php");
        {
            do
            {
//wenn das skript ende, also $content[$e] ="?>" endet, ist $d = 0 und 
//damit die schleife beendet
                if($content[$e]=="?>")
                {
                    $de = (int) 0;
                }
                else
                {
                    $de = (int) 1;
                }
                unset($content[$e]);
                $e++;
            }
            while($de != 0);
        }
        $i++;
    }
    while($i <= $count);
    $content = implode("\n",$content);
    echo $content;
}
?>
Eine Datei, die damit gefiltert wird, könnte so aussehen:
PHP:
<?php
$de = (string) 5;
echo $de;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Unbenanntes Dokument</title>
</head>
<?php
$de = (string) 5;
echo $de;
?>
<body>
</body>
<?php
$de = (string) 5;
echo $de;
?>
</html>
Weißt jemand Rat? :rolleyes:

Edit: Diese Meldung erhalte ich nach ca. 60 Sekunden:
Fatal error: Maximum execution time of 60 seconds exceeded
 
Zuletzt bearbeitet:
Vielleicht machts der PHP-Parser ja genauso wie der hier im Forum.
Denkt vielleicht der Code ist im Kommentar zuende weil ein ?> kommt
 
Hallo,

würde dir folgenden Tipp geben:

Es ist praktischer foreach Schleifen zu verwenden und sich nicht auf vage Abbruchbedingungen zu verlassen wie einen String-Vergleich, der eine bestimmte Formatierung voraussetzt.

Der 60 Sekunden TimeOut sind (Apache) Settings von deinem Server, der ein PHP-Script nach der Zeit abbricht.
Kann man ändern, zeigt dir aber hier nur, dass deine Schleifen für diese Aufgabe wohl endlos laufen (deshalb siehe oben den Tipp).

if($content[$i]="<?php"); <-- das Semikolon macht mich auch ein wenig stutzig und normales "=" ist eine Zuweisung.

Weiterhin würde ich keine Variable mit unterschiedlichen Datentypen füllen, wie $content , das ist im besten Fall schlechter Stil, im schlechtesten bekommst du dadurch Fehler.
 
Zuletzt bearbeitet:
kann es sein dass dein abbruchkriterium nicht funktioniert?

wie wärs wenn du die datei einließt und mit preg_replace alles ersetzt, was nicht zwischen <?php ... ?> steht?

[edit]

preg_grep dürfte sinnvoller sein

krafty hat recht, das semikolon gehört da nicht hin, das bricht die if-anweisung sofort ab
 
Zuletzt bearbeitet von einem Moderator:
Vielen Dank!
Dises Skript löst mein Problem ;)
PHP:
<?php
if(is_readable('kontakt.php'))
{
	$content = file_get_contents('kontakt.php');
	$content2 = explode("\n",$content);
	$count = count($content2);
	for($n = 0; $n<=$count; $n++)
	{
		if($content2[$n] == "<?php")
		{
			for($n; $content2[$n] != "?>"; $n++)
			{
				unset($content2[$n]);
			}
		}
		
	}
	$content3 = implode("\n",$content2);
	$content4 = str_replace("?>","",$content3);
	echo $content4;
}
?>
 
Zurück
Oben