HTML-Teil einer Seite per PHP austauschen

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von Jakob, 13.07.2005.

  1. Jakob

    Jakob Thread Starter MacUser Mitglied

    Beiträge:
    1.067
    Zustimmungen:
    21
    MacUser seit:
    05.01.2004
    Hallo,

    habe eine Seite auf der eine Tabelle mit Daten ist. Diese Tabelle wird nur halbjährlich geändert, weshalb ich nicht für jeden Aufruf ne DB-Abfrage möchte, sondern auch gleich das Adminsystem den HTML-Code in die Datei schreiben kann.

    Das ist der Knackpunkt.

    Ich habe den auszutauschenden Bereich per PHP-Kommentare gekennzeichnet und über diesen Code
    PHP:
    $ersetzen '=//.*termine_start.*//.*termine_stop.*=siU';
    $durch    '// termine_start'.$Termin_Tabelle.'// termine_stop';
    $str      preg_replace($ersetzen$durch$str);
    $str ist der Inhalt des HTML-Dokuments.

    2 Fragen:
    Muss ich den Inhalt wirklich komplett einlesen?
    Wie mache ich das? fopen und dann? Und wie überschreib ich die Datei?

    Danke!
     
    Zuletzt bearbeitet: 13.07.2005
  2. ThaHammer

    ThaHammer MacUser Mitglied

    Beiträge:
    3.276
    Zustimmungen:
    13
    MacUser seit:
    01.06.2004
    Ich habe mal was ähnliches gebastelt, das ersetzt auch einen teil des HTML Codes.
    Du liest die Datei erst komplett ein und speicherst Sie zwischen.

    PHP:
    if($datei fopen($pfad,"r")) // Datei öffnen
        
    {
            
    $z=file_get_contents($pfad);
    Das ist jetzt nur ein Ausschnitt. Danach suchst Du den Start und Endpunkt des zu ersetztenden Beriches und schreibst den neuen text rein.
    Mit $wert = htmlentities($wert); // String in html ändern
    Zeichen konvertieren falls ä,ü, oder so mit drin sind.

    PHP:
    $datei1 fopen($pfad,"w");
                
    fwrite($datei1,$z,$gesamtneu);
    Zum Schluß mußt Du das ganze so wieder zurück schreiben. w damit php die vorhandene Datei komplett ersetzt, sonst bleiben immer Reste übrig.

    Ich könnte es Dir auch komplett zuschicken, dann kannste es selber mal durchschauen.
     
  3. Jakob

    Jakob Thread Starter MacUser Mitglied

    Beiträge:
    1.067
    Zustimmungen:
    21
    MacUser seit:
    05.01.2004
    Hallo,

    danke für die Hilfe. Hab's leider nicht mit file_get_contents machen können, da hier erst PHP 4.1.2 vorherrscht. Hab es jetzt so gemacht:

    PHP:
    function html_austauschen($Tabelle){
    $pfad '../Seminarangebote/Termine_Preise.php';

    if(
    $datei fopen($pfad,"r")){
        while (!
    feof($datei)) { // Umstand wegen PHP < 4.3
            
    $str .= fread($datei8192);
        }
        
        
    $ersetzen '=<!--.*termine_start.*-->.*<!--.*termine_stop.*-->=siU';
        
    $durch      '<!-- termine_start -->'.$Tabelle.'<!-- termine_stop -->';
        
        if(
    $neu preg_replace($ersetzen$durch$str)){
        
        
    $datei fopen($pfad,"w");
            if(
    fwrite($datei,$neu) === FALSE){
                echo 
    'Datei konnte nicht ge&auml;ndert werden';
                exit;
            } else echo 
    "Daten wurden aktualisiert:";
        } else {
        echo 
    'Terminbereich konnte nicht gefunden werden';
        }
        
    fclose($datei);
    }
    }
    Dieses zweimalige Öffnen von der selben Datei nur mit anderem Zeiger, ist das OK? Funktionieren tut's :D
     
  4. dms

    dms Gast

    Klar, is OK. Schöner wäre es, meiner Meinung nach aber, die Datei so einzulesen:
    Code:
    $str=implode("",file($pfad))
    Dürfte auch schneller gehen.
     
  5. Jakob

    Jakob Thread Starter MacUser Mitglied

    Beiträge:
    1.067
    Zustimmungen:
    21
    MacUser seit:
    05.01.2004
    Hab mal gerade verglichen. Ist schwer, da das sehr kleine Zeiten sind, die auch noch gut schwanken, aber „meine“ Lösung ist öfter unter 0.05 sek, „Deine“ öfter drüber. Natürlich nicht mal im Ansatz statistisch auswertbar ;)

    Schöner ist sie aber auf jeden Fall.
     
  6. ThaHammer

    ThaHammer MacUser Mitglied

    Beiträge:
    3.276
    Zustimmungen:
    13
    MacUser seit:
    01.06.2004
    Na hauptsache es funktioniert! :D
     
Die Seite wird geladen...

Diese Seite empfehlen