HTML-Teil einer Seite per PHP austauschen

Jakob

Aktives Mitglied
Thread Starter
Dabei seit
05.01.2004
Beiträge
1.070
Reaktionspunkte
21
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:
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.
 
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($datei, 8192);
	}
	
	$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
 
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.
 
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.
 
Zurück
Oben Unten