kostenloser Webspace werbefrei: lima-city


Datei auslesen und bestimmte Schnipsel ersetzen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    limabone

    Kostenloser Webspace von limabone

    limabone hat kostenlosen Webspace.

    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
    <?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);
    ?>
    Template-Datei layout.php
    {DOCTYPE}
    
    <html {XMLMS}>
     <head>
      {HEAD}
     </head>
     <body>
      {BODY}
     </body>
    </html>
    TMP-Datei doctype.tmp
    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Ändere
    str_replace("{DOCTYPE}", DOCTYPE, $zeile);
    in
    $zeile = str_replace("{DOCTYPE}", DOCTYPE, $zeile);
    und es wird funktionieren.
  4. 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
  5. Autor dieses Themas

    limabone

    Kostenloser Webspace von limabone

    limabone hat kostenlosen Webspace.

    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:
    <?php
    if(empty($_GET['page'])) {
     include('inc/home.php');
    }
    ?>
    soweit so gut, nur führt er (Browser) diesen Befehl nicht aus o.O
    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
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!