HTML Seite eigenständig erzeugen

penalizer

Mitglied
Hallo Forumfreunde,
schlage heute meinen persönlichen Rekord und brauche zum 2. mal heute Eure Hilfe.
Ich hoffe ich kann mein Problem ausreichend schildern. Ich habe eine php-Datei deren Inhalt anhand einer id aus der Datenbank generiert wird. Nun möchte ich aus dem Ergebnis, welches der User angezeigt bekommt eine statische HTML Seite erzeugen lassen, die auf dem Server hinterlegt wird. Ich habe folgenden Weg versucht und bin an 2 Dingen gescheitert. Zuerst einmal mien Skript:

PHP:
<?php
//Datei auslesen
$filename = "index.php?id=1"; 
$handle = fopen ($filename, "r"); 
$contents = fread ($handle, filesize ($filename)); 
$geschrieben = fwrite($handle, "");
fclose ($handle); 
 
//Inhalt eintragen
$file = fopen("test.html", "w");
$geschrieben = fwrite($file, $contents);
fclose($file);
?>

So, zum einen wird der Wert der Variable $filename nicht akzeptiert. Denke das man keine Variablen zur Inahltdefinition benutzen kann. Zum anderen würde (Habe ich asuprobiert) ich nur die index.php auslesen lassen bekomme ich zudem das gesamte Skript (einschließlich php) in die "test.html" geschrieben. Ich möchte allerdings nur den Inhalt haben den der User angezeigt bekommt, also plain HTML.

Bin ich gänzlich auf dem falschen Weg oder liege ich mit fopen gar nicht mal so verkehrt?

P.S. Vielleicht sollte ich noch kurz erläutern was das ganze soll. Heute morgen habe ich mich in das Apache Modul "mod_rewrite" hineingearbeitet, mit dem man aus Suchmaschinenunfreundlichen Links test.phpid=1&lang=deu), Suchmaschinenfreundliche links erstellen kann (test_1_deu.html)[wie auch hier im Forum wunderbar zu sehen ist.]. Wie schon erwähnt ist dies allerding ein nur ein Apachemodul. Jetzt benötige ich einen alternative für einen Windowsserver und habe mir überlegt für jede dynamisch generierte Webseite eine statisch-identische auf dem Server abzulegen und per Sitemap an google zu senden. Ich hoffe das auf diesem Wege eine optimierung zu erreichen ist.
 

tombe

Erfahrenes Mitglied
Hi,

wodurch unterscheiden sich die einzelnen Seiten denn? Nur vom Inhalt oder auch vom Aufbau.

Wenn der "optische" Aufbau bei der Seite mit id = 1 gleich ist mit der Seite id = 2, 3, 4, ... dann schreib doch den HTML Aufbau direkt mit fputs in die Datei und ergänze den dynamischen Teil entsprechend.

z.B.

fputs($datei, "<b>Ich bin die Überschrift</b>");
fputs($datei, <img src=mysql_result(.....)</img>);

Das da oben stimmt jetzt bestimmt nicht so richtig aber ich hoffe Du verstehst was ich meine.

Gruß Thomas
 

penalizer

Mitglied
Keine schlechte Idee wenn ich es richtig verstanden habe. Aber da ich im Skript auch schleifen verwende und es relativ gross ist, ist es natürlich sehr umständlich das auf diesem Wege zu tun. Aber Danke vielleicht klappt es ja doch so.
 

penalizer

Mitglied
Im endeffekt brauche ich nur den HTML Quelltext dem der Client empfängt nachdem der Parser losgelegt hat in einer Variable. Ich denke so ist es etwas glücklicher ausgedrückt und auf dem Punkt gebracht ;-)
 

Gumbo

Erfahrenes Mitglied
Folgendes wäre möglich:
PHP:
<?php

	ob_start();

	$maxAge = 3600;
	$cacheFile = '/cache/'.getURID();
	if( file_exists($cacheFile) && filemtime($cachefile) < time()+$maxAge ) {
		header('Last-Modified: '.date('D, d M Y H:i:s T', filemtime($cachefile)), true);
		readfile($cacheFile);
		exit;
	}


	…


	file_put_contents($cacheFile, ob_get_contents());
	ob_end_flush();

?>
PHP:
/**
 * Unique Request ID
 */
function getURID()
{
	parse_str($_SERVER['QUERY_STRING'], $args);
	ksort($args);
	$tmp = '';
	foreach( $args as $arg => $value ) {
		if( $tmp != '' ) {
			$tmp .= '&';
		}
		$tmp .= rawurlencode($arg);
		if( $value != '' ) {
			$tmp .= '='.rawurlencode($value);
		}
	}
	return sha1(preg_replace('/\?.*/', '', $_SERVER['REQUEST_URI']).($tmp!='' ? '?'.$tmp : ''));
}