PHP-Datei einlesen und später abarbeiten

tuFrogs

Mitglied
Hi!

Für ein kleines selbstgebasteltes CMS habe ich ein Template-System erstellt das an einer Stelle mit folgenden Code die gewünschte Seite einliest um sie an anderer Stelle einzubinden:

PHP:
			ob_start();
			
			if(!file_exists('install.php')) {
				eval(file_get_contents($file));
			}
			else {
				eval(file_get_contents('install.php'));
			}
			$content = ob_get_contents();
			ob_end_clean();
			return $content;

Die Datei die geladen wird ist eine "normale" PHP-Datei mit <?php und ?>. Genau das verursacht Probleme.
Parse error: syntax error, unexpected '<' in /var/www/html/.../content.php(39) : eval()'d code on line 1

Kann ich das umgehen ohne <?php ?> entfernen zu müssen?
 
Bei require / include wird der Code dann aber an der Stelle bereits ausgeführt. Soll er aber nicht. Die Datei will ich an der Stelle in eine Variable einlesen und an anderer Stelle erst ausgeben..
 
Hi!

Hmmm... Also wenn man eine Reihe von Befehlen einbinden, uns später erst ausführen will, ist das ein Paradebeispiel für Funktionen (bzw. etwas erweitert dann Klassen).
Was hältst Du denn davon, das ganze doch mit include einzubinden, aber die Inhalte einfach in eine Funktion zu schreiben?

Du musst dann einfach nur an der gewünschten Stelle den Funktionsaufruf tätigen!
Also so:
Code:
.... CODE CODE ...
INCLUDE (Hier wird nur die PHP Datei mit Deiner Funktion eingebunden)
...CODE CODE CODE
FUNKTIONSAUFRUF
...CODE CODE CODE

Liebe Grüße,
Chris

BTW: "EVAL IS EVIL!" ;-) => Großes Sicherheitsrisiko!
 
Ich will ja nichts ersetzen, deshalb nutze ich nicht str_replace sondern eval. Lasse ich eval weg wird zwar mein Template nicht beeinträchtigt, jedoch erscheint vom gewünschten Inhalt nichts :(

Ich habe jetzt nicht viel gefunden zu einem Sicherheitsproblem mit eval().

Also die gewünschte Seite wird bei mir über http://www.example.com/modulname/aktion/file.htm aufgerufen (ModRewrite) wobei der Modulname ein Verzeichnis auf meinem Webspace ist und der "Kram" wird nur ausgeführt wenn überhaupt vorhanden. Also kein http://www.example.com/http://www.hacker.de/ich_mach_dich_platt.php möglich ^^

Hab die Lösung:
PHP:
	eval("?>" .file_get_contents('install.php'). "<?");

Jedoch versteh ich gerade nicht warum ich bei dieser Lösung nicht
PHP:
	eval("?>" .file_get_contents('install.php'). "<?php");
verwenden kann?
 
Zuletzt bearbeitet:
Zurück