Was belastet den Server mehr?
Sakur Enseleit
- php
0 Henrik Schumacher0 Marko0 Martin
Hallo Forum,
In meinem Gästebuch werden die Einträge in einer mySQL Datenbank gespeichert. Vorher lasse ich den Text aber durch die Funtkion htlientities() bearbeiten und ersetze alle \n durch <br />.
Das Problem dabei ist jetzt, dass die Einträge noch im Nachhinein editierbar sein sollen, was sich bei einem auf HTML optimierten Text für einen Laien wahrscheinlich ziemlich schwer gestaltet. Die einzige Möglichkeit wäre nun, die Einträge nicht HTML optimiert in die Datenbank einzugeben, sondern jedesmal htmlentities() und \n zu ersetzen, wenn der Eintrag ausgegeben wird. So bleibt der Originaltext immer in der Datenbank und somit leicht editierbar. Ich denke mir aber, dass das doch den Server ungemein mehr belastet als wenn er sich einfach nur den Text aus der Datenbank holt und ihn ausgibt, oder?
Zu was würdet ihr mir in diesem Fall raten?
mfg, Sakur
Warum wandelst du den <BR>-Tag nicht einfach wieder in \n um wenn der Nutzer den Text editieren will?
Warum wandelst du den <BR>-Tag nicht einfach wieder in \n um wenn der Nutzer den Text editieren will?
Wie ich geschrieben habe, ersetze ich auch die HTML-Zeichen, damit nicht irgendein unerwünschter Code ausgeführt wird. Und das alles rückgängig zu machen ist ein bisschen viel Arbeit.
Hallo,
Warum wandelst du den <BR>-Tag nicht einfach wieder in \n um wenn
der Nutzer den Text editieren will?
Wie ich geschrieben habe, ersetze ich auch die HTML-Zeichen, damit
nicht irgendein unerwünschter Code ausgeführt wird. Und das alles
rückgängig zu machen ist ein bisschen viel Arbeit.
Gruesse,
CK
Hallo Sakur,
klar jedesmal ersetzten ist bedeutend mehr Rechenaufwand Im allgemeinen sollte das aber keine Rolle spielen, die kleine Gästebuchseite darzustellen, das macht der Server in ein paar Millisekunden. Wenn jetzt nicht gerade tausende von Leuten pro Stunde es sich abrufen kannst Du das einfach vergessen, davon abgesehen, Ist das Dein Server ? Warum sollst Du Dir superviel Arbeit bei der Optimierung machen, nur damit Puretec & Co. vielleicht einen Server einsparen kann, und auch nur dann wenn die was weiss ich wieviel hundert Benutzer die mit drauf sind genauso denken ?
Eine andere Möglichkeit wäre es, nach jedem Abspeichern des Eintrags das Gästebuch als statische Seite zu erzeugen und auf dem Server abzulegen, also zu cachen.
Gruss
Marko
Hy!
Funktioniert das in einem Forum auch? Ich möchte 10 Einträge pro Seite ausgeben. Würde der Server es auch hier schaffen mit den htmlentities und den <br> ?
Hallo,
Funktioniert das in einem Forum auch? Ich möchte 10 Einträge pro Seite ausgeben. Würde der Server es auch hier schaffen mit den htmlentities und den <br> ?
ich mache es mit meinem neuen Forum auch so, ob er jetzt 0.00001 oder 0.0008 Sekunden braucht, faäält glaube ich nicht ins Gewicht.
Ok. also lieber erst bei der Ausgabe erstezen
Ok. also lieber erst bei der Ausgabe erstezen
ja würde ich sagen, weil ich habe auch eine Menge Smileys und Links, die von [link]URL[/link] erst umgewandelt werden. Wenn ich das schon beim speichern mache, "vermischt" sich bei mir das HTML des Postings mit dem HTML des Forums, nachdem es ausgegeben wird.
stimmt daran habe ich gar nicht gedacht.
das wollte ich nämlich auch machen dieses [link][/link],[b][/b],...
wie ersetzt du das eigentlich? einfach jedes [link] mit <a href=... und jedes [/link] mit </a>, oder gibts da eine PHP Funktion mit der man sozusagen von-bis ersetzen kann?
Hallo,
Ich arbeite zwar mit Perl, aber vielleicht kannst du dir aus meiner Subrountine etwas ableiten :
sub changeintohtml {
my $text = shift;
$$text =~ s/</</g;
$$text =~ s/>/>/g;
$$text =~ s/\n/<br>/g;
$$text =~ s/"/"/g;
$$text =~ s/(\s\s+)/(' ' x (length($1)-1)) . ' '/eg;
while ($$text =~ /[s(\d\d?)]/g) {
my $tag = "<img src="pics/smiley$1.gif" alt="">";
$$text =~ s/[s\d\d?]/$tag/;
}
while ($$text =~ /[image](.+?)[/image]/g) {
my $tag = "<img src="$1" alt="">";
$$text =~ s/[image].+?[/image]/$tag/;
}
while ($$text =~ /[link](.+?)[/link]/g) {
my $tag = "<a href="$1">$1</a>";
$$text =~ s/[link].+?[/link]/$tag/;
}
while ($$text =~ /[flash=(\d{1,4}),(\d{1,4}),version=(\d)](.+?)[/flash]/g) {
my $tag = "<object classid="CLSID:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://active.macromedia.com/flash2/cabs/swflash.cab#version=$3,0,0,0" width="$1" height="$2">
<param name="movie" value="$4">
<param name="quality" value="high">
<param name="scale" value="exactfit">
<param name="menu" value="true">
<p>Sorry, dein Browser kann das Flash Movie nicht anzeigen.</p>
</object>";
$$text =~ s/[flash=\d{1,4},\d{1,4},version=\d].+?[/flash]/$tag/;
}
}
Nachtrag,
desweiteren verwendet die Subroutine Referenzen (Zeiger) wodurch wie Effizient noch mehr gesteigert wird, was dann natürlich den Server noch weniger belastet.
desweiteren verwendet die Subroutine Referenzen (Zeiger) wodurch wie Effizient noch mehr gesteigert wird, was dann natürlich den Server noch weniger belastet.
Was sind denn Referenzen?
Hi,
Referenzen sind eine Form von Daten, die auf andere Daten verweisen. Man kann mit einem Zeiger die Speicherposition einer Variable ermitteln.
Wenn du jetzt zB
$string = 'Das ist ein String'; #hast, kannst du (in Perl) mit
$zeiger_auf_string = $string; #die Speicherposition von $string ermitteln.
Jetzt kannst du durch $$zeiger_auf_string (2 Dollar Zeichen)
$string indirekt ändern, also
$$zeiger_auf_string = 'neuer String';
wenn du dir jetzt mit print $string; den Wert von $string ausgeben lasst, erhältst du 'neuer String' als Ausgabe, aber es wird trotzdem noch immer auf die gleiche Speicherstelle gezeigt.
Die Möglichkeit den Text erst nachträglich zu formatieren ist kein Problem, ich würde jedoch eine andere Möglichkeit vorschlagen:
Bei der Eingabe formatierst du den Text so:
$text = htmlentities($text);
$text= addslashes($text);
$text= str_replace("\n", "<BR>", $text);
Beim Editieren andersherum, htmlentities wird nicht rückgängig gemacht:
$text = str_replace("<BR>", "\n", $text);
$text = stripslashes($text);
Da HTML ja verboten ist und eher die Ausnahme sein sollte fällt htmlentities kaum ins Gewicht.
Bei der normalen Ausgabe brauchst du dann nur stripslashes, aber das braucht man ja immer.
Bei der normalen Ausgabe brauchst du dann nur stripslashes, aber das braucht man ja immer.
stripslashes() kannte ich noch gar nicht. Wann kommen denn unerwünschte Slashes in den Text rein?
Bei der normalen Ausgabe brauchst du dann nur stripslashes, aber das braucht man ja immer.
stripslashes() kannte ich noch gar nicht. Wann kommen denn unerwünschte Slashes in den Text rein?
Um bestimmte Zeichen (zB die Anführungszeichen) in der Datenbank zu speichern muss man vorher ein \ davor setzen, das macht adslashes().
In der Regel steht aber die Servervariable magic_quotes_gpc auf on (kann man mit phpinfo() einsehen, einfach mal ausführen) das heisst der Server nimmt dir das ab wenn du's vergisst.
Vor der Ausgabe brauchst du aber unbedingt ein stripslashes(), ansonsten hast du sowas wie " in den Beiträgen stehen. Kannst ja einfach mal einen Eintrag mit Anführungszeichen in dein Gästebuch schreiben, dann siehst du am besten was ich meine :)