Eddi grüßt Eddie *lach*
[Traurig guck] ich hab' nur vier ;(
meine Website ist eine einzige Formularhoelle,
wie meinst Du das? So viel sind das nicht.
Naja, "Hoelle" ist natuerlich uebertrieben. 17 verschiedene Formulare sind's, die meisten stehen nur Mitgliedern zu Verfuegung.
Ach so.
Man muss halt immer die Balance finden zwischen Aufwand und Benutzerfreundlichkeit. Ich habe mich halt entschieden, den Besuchern so viel Hilfe wie moeglich an die Hand zu geben. Das kostet mitunter viel Zeit und viel Code. Aber ich verliere dafuer keine Besucher, weil mal was nicht gleich geht und sie es nicht verstehen.
Das ist überaus löblich und begrüßenswert, im Gegensatz zu mir (, was ich auch ohne Wenn und Aber bewußt an so hinnehme)
Allerdings verstehe ich den Ansatz "alles immer in eine DB" einzumeißeln so rein gar nicht. Textdatei in ein Verzeichnis ablegen, was umformatiert alles an Daten enthält.
Hat alles Vor- und Nachteile. Mit Textdateien bist Du natuerlich unabhaengig von irgendwelchen DB-System. Und ggf. auch flexibler, weil Du Dir Dein eigenes Zeug zusammen basteln kannst. Auf der anderen Seite bekommst Du garantiert Probleme, sobald das Ganze etwas umfangreicher wird. Nimm mal an, Du hast ein paar tausend Gaestebucheintraege (bei mir sind's um die 900, zu Zeit kommen monatlich 100 dazu) und Du willst die nach bestimmten Kriterien anzeigen (z.B. Nr. 4500- 4520). Die muessen natuerlich rausgesucht werden. Also hast Du 2 Moeglichkeiten:
Beim Schreiben des Eintrags die ganze Datei sortieren (oder Indexdateien anlegen) ==> langsames Schreiben, schnelles Lesen.
Oder ungeordnet reinschreiben und beim Lesen alles durchsuchen ==> schnelles Schreiben, langsames Lesen.
Wenn das jetzt kein Gaestebuch ist, sondern was Aufwendigeres, wird's schnell eng.
Das ganze gliedere ich mal:
Kriterum (z.B. Nr. 4500- 4520)
Also sage ich der auslesen.php?4500=4520 und kann superein-
fach auf die Dateien zugreifen (nur beispielhaft):
$a=eplode('=',$_SERVER['QUERY_STRING']);
for($i=$a[0];$i<=$a[1];$i++)
{
if(file_exists($path.$i.'.txt') include($path.$i.'.txt');
}
900+ Monatlich 100
Selbst mehrere 10000 Datein machen nicht wirklich viel aus.
Aber auch da habe ich eine Lösung (noch nicht anwenden
müssen) parat: Du läst nur neu Einträge in einzelne Dateien
schreiben, die nach der Adminfreigabe in Dateien von 1000
Beiträgen verschwinden läßt.
Davon ausgehen, daß Du 1024 Byte in eine Zeile packen kannst,
beschränkst Du beispiels einen Beitrag auf 5 kB Datengröße.
1. Zeile $name."\t".$mail."\t".$link.$usw;
2. Zeile $textarea[0]
3. Zeile $textarea[1]
4. Zeile $textarea[2]
5. Zeile $textarea[3]
$textarea werden beispielweise alle Umbrüche durch strings
ersetzt, die mit hoher Wahrscheinlichkeit nicht im text vor
kommen (bsw.: '¬¬¬'). Danach splittest Du das ganze nur noch
alle 1024 Byte durch ein Umbruch.
Setzt "endof($textarea)" vor Zeile fünf ein, wird diese ein-
fach mit einem Umbruch gefüllt.
So bekommst Du eine Datei, mit 5000 Zeilen für die folgendes
gilt:
$a=file($phat.'gaestebuchblock_0.txt');
for($i=0;$i<5001;$i+=5)
{
$kopfdaten=explode("\t",$a[$i]);
$text=$a[$i].$a[$i+1].$a[$i+2].$a[$i+3].$a[$i+4];
$text=ich_mach_dich_zu_html($text);
}
Eine Datenbank mach doch prinzipiell(!) auch nicht anderes ;)
Schreibe und Lesegeschwindigkeit
Warum sollte man die ganze Datei sortieren? Neuer Beitrag
neue fortlaufende Nummer; d. h. für das grade dargelegte:
fopen($path.'gaestebuchblock_3.txt','a');
Auslesen von Beitrag 4500-4520
(en==Ende an==Anfang)
$an=4500;
$a=(int) substr($an,0,strlen($an)-3);
$a=$a*5;
$an=substr($an,-3);
$en=4520;
$e=(int) substr($an,0,strlen($an)-3);
$e=$e*5;
$x=file($path.'gaestebuchblock_'.$an.'.txt');
und dann wieder mit for() 20 mal auslesen, oder aber,
wenn Du dabei wirklich feststellen solltest, das Dir die
0,x Sekunden viel zu viel sind kannst du immer noch mit
fopen() und fseek() an Funktionen arbeiten, sowie einer
"Logdatei", in der die Datenzeiger auf die eizelnen Bei-
träge abgelegt sind.
Über exklusivern Zugriffsschutz braucht man sich nicht
groß zu unterhalten, Tom hatte dort ein vortreffliches
Kollokvium erst kürzlich hier im Forum geführt.
Abgesehen davon bist Du der einzige, der in diese Datein
mit Adminscripten schreiben kann. Und dag würde sogar
im Notfall von Hand ohne Scripte gehen, da Klartext und
über FTP erreichbar.
Wartungsfreuntlicher kann im Fehlerfall glaube ich kaum
irgendetwas anderes sein.
Das kann Dir aber auch mit Textdateien passieren.
Ist mir noch nicht vorgekommen. Das eine DB aber bereits bei der Programmierung wesentlich mehr Aufmerksamkeit bindet, ist ansich ein Indiz für mögliche Fehlerquellen.
... und fährt somit für meine Begriffe mit dem linken Bein auf einem Autotach und mit dem rechten Bein auf einem anderen Autodach.
Das kann Dir aber auch mit Textdateien passieren.
Jo, aber ich bin mal so frech und behaupte, dann ist PHP ganz down, wenn das nicht einmal mehr lesen will ;)
Gruesse, Eddie (mit fuenfen)
Was soll ich tun? Meine Mutter hauen ;)
Gruß aus Berlin!
eddi
Manchmal trifft es einen doch ganz unverhofft t86591:
> '..."Vorläufig abgebrochen" ist ungefähr so sinnvoll formuliert, wie "einstweilig erschossen" oder "temporär verbrannt"...'
Ich danke Sven für diese Erkenntnis - Gott, was habe ich gelacht ;)