Thomas Schmieder: HTML code auf einer HTML Seite anzeigen

Beitrag lesen

Hallo Fabi,

jetzt geb ich meinen Senf auch noch dazu:

tu das, ich werde es auch machen. *forumzusenf*

ich hab noch etwas Ketchup...

Schreib deine HTML-Seite ganz normal in eine Datei.
Dann lad die Datei mit

fread liest die Datei binär ein, das heißt blockoreintiert und nicht Zeilenweise. Ein Blocktreiber ist sehr nah an der Hardware und daher sehr schnell.

$fp= fopen("datei","r");
$DateiInhalt = fread($fp,filesize("datei"));
fclose($fp);

$DateiInhalt = htmlspecialchars($DateiInhalt);
echo $DateiInhalt;

och nö... das haben wir doch gestern erst hier durchgekaut.
man muss

file() liest die Datei textorientiert ein, das heißt, innerhalb eines Blocktreibers (der immer benötigt wird) läuft ein zweiter "Blockprozess" für jede Zeile ab. Die Datei wird vom Treiber also gelesen und ausgewertet, um die Zeilenendezeichen zu finden. Eine solche Stringvergleichsoperation kostet sehr viel Zeit.

Mit File wird die Datei zeilenweise in ein Array eingelesen. Jede Zeile der Datei (abgeschlossen durch ein [CR]LF) wird in ein eigenes Array-Element geschrieben.

$daten = file("datei");
$ganzesfile = implode($daten);
$ganzesfile = htmlspecialchars($ganzesfile);
echo $ganzesfile;

Ich halte es nicht für sinnvoll, die Datei erst in Zeilen zu zerlegen, um sie dann anschließend mit implode() wieder zusammenzusetzen. Dann kann man sie doch gleich am Stück verarbeiten, gelle?

das so machen. ausserdem spart man 'ne zeile. (;D)

nicht ganz. bleibt die überaus philosofische frage, was denn nun schneller ist >;)

Na, meine Version natürlich. Ich würde mal schätzen, dass die weniger als halbsolange braucht. Die meiste Zeit brauchen sowieso die Stringoperationen von htmlspecialchars(): Für jede auszutauschende Zeichengruppe ein Durchlauf Suchen, Datei umkopieren um Platz fürs Einfügen zu schaffen, Einfügen, nächstes Zeichen.

Könnte auch so ablaufen, dass die Datei einmal umkopiert wird und währenddessen alle zu tauschenden Zeichenketten gescuht werden. Immer, wenn eine auftaucht, wird si erkannt und ausgetasucht. Dann muss man aber die Zeichen der Datei mit einem Set (Menge von Zeichen) vergelichen, und das kostet auch Takte und damit Zeit. Dafür könnte man nun Schicht für Schicht (im Sprachmodell) eine Übertragungsfunktion aufstellen und das ganze berechenbar machen.

Das lohnt sich aber nur bei sehr großen Dateien, da bei kleinen die Zugriffszeit des Dateisystems (Festplatte 5 bis 12ms, je nach Qualität) für den Erstzugriff auf die Datei überwiegt. Die Abarbeitung bewegt sich stattdessen im Nanosekundenbereiceh.

So, das war ne ganze Flasche...

Fabian
[senf]

Tom
[Ketchup]