Datei auslesen und bestimmte Schnipsel ersetzen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
art
ausgeben
auslese
aussuchen
befehl
code
datei
einfachste art
ersetzen
file
haut
kleinen tests
layout
lokale datei
page
phrase
problem
test
url
zeile
-
Hallo,
wenn man so den Titel liest denkt man sicher an eine Phrase, aus der manche Wörter durch andere ersetzt werden soll.
Nein. Ich hab schon probiert, aber es haut nicht hin.
Vorgangsweise:
1. Datei auslesen
2. Bestimmte Wörter (hier: {DOCTYPE}, {HEAD}, {XMLMS} usw...) aussuchen
3. Durch Datein ersetzen, die im Verzeichniss darunter /tmp/ liegen
Das ist mein Code:
Anzuzeigende Datei index.php
Template-Datei layout.php<?php define( DOCTYPE, require('tmp/doctype.tmp'), true ); // LOKALE DATEI AUSLESEN $userdatei = fopen( 'inc/layout.php', 'r' ); while(!feof($userdatei)) { $zeile = fgets($userdatei,1024); str_replace("{DOCTYPE}", DOCTYPE, $zeile); echo $zeile; } fclose($userdatei); ?>
TMP-Datei doctype.tmp{DOCTYPE} <html {XMLMS}> <head> {HEAD} </head> <body> {BODY} </body> </html>
Hallo ich bin der Doctype wie gehts?
Fertig sollte es ein CMS werden. Sinn dahinter finde ich, über die Webseite später dann einfach nur zB: {MENUE} in die Datei zu schreiben, und dass dieses Stück einfach durch das Template menue.tmp ersetzt wird und normal dargestellt wird.
EDIT: Das problem ist, dass der {DOCTYPE}-Tag am Ende noch immer da steht, obwohl er schon längst ersetzt wurde. => "Hallo ich bin der Doctype wie gehts?{DOCTYPE} {HEAD} {BODY} "
Beitrag zuletzt geändert: 14.7.2010 14:47:38 von limabone -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ändere
instr_replace("{DOCTYPE}", DOCTYPE, $zeile);
und es wird funktionieren.$zeile = str_replace("{DOCTYPE}", DOCTYPE, $zeile);
-
Zudem sollte
define( DOCTYPE, require('tmp/doctype.tmp'), true );
eigentlich nicht gehen. Richtig wäre:
define('DOCTYPE', file_get_contents('./tmp/doctype.tmp'));
require würde die Datei einfach ausgeben. Zudem gehört DOCTYPE in Anführungszeichen - du solltest eigentlich ein E_NOTICE erhalten.
Der ganze Code:
<?php define('DOCTYPE', file_get_contents('./tmp/doctype.tmp')); $userdatei = fopen('inc/layout.php', 'r'); while (!feof($userdatei)) { $zeile = fgets($userdatei,1024); $zeile = str_replace("{DOCTYPE}", DOCTYPE, $zeile); echo $zeile; } fclose($userdatei); ?>
PS: Vielleicht willst du auch statt deinem Code zu nutzen einmalig ein file_get_contents ausführen und gleich mehrere Sachen ersetzen, das ist schneller:
$replace = array( '{DOCTYPE}' => DOCTYPE, '{MENU}' => MENU, // ... ); echo str_replace(array_keys($replace), $replace, file_get_contents('./inc/layout.php));
Beitrag zuletzt geändert: 14.7.2010 16:06:46 von nikic -
Boah Nikic, dein geballtes Wissen hat mich vor der volkommenden Frustration geschützt ;D
Danke dir, es hat super funktioniert!
EDIT: Ok jetzt bin ich auf ein Problem gestoßen. Ich wollte {CONTENT} durch eine Datei ersetzen, in der das hier steht:
soweit so gut, nur führt er (Browser) diesen Befehl nicht aus o.O<?php if(empty($_GET['page'])) { include('inc/home.php'); } ?>
Schaut es euch bitte selber hier an. Im Quelltext, ziemlich unten.
EDIT: Jetzt bin ich mir sicher. Nach einem kleinen tests ein php file auf einfachste art, rein mit file_get_contents('test.php'); ausgeben scheiterte. In dem file steht "<?php echo 'Test funkt.'; ?>" und es kam kein Inhalt!! file_get_contents muss daher PHP komplett ignorieren.. also welche ART der auslesung sollte ich dann verwenden??
Beitrag zuletzt geändert: 15.7.2010 18:27:14 von limabone -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage