Hi!
aber ist es nicht verhältnismässig leicht, das Inhaltsverzeichnis einer Website auszulesen und Datein oder Scripte daraus runterzuladen?
Jein, kommt auf die Konfiguration des Webservers an. Mit einem Default-Dokument kommt bei .../ immer selbiges. Ein Dateiverzeichnis kommt nur beim Fehlen des Defaultdokuments und wenn das Directory-Listing erlaubt ist. Ansonsten wäre es eine hervorragende Idee, Dateien, die nicht im Web abrufbar sein sollen, außerhalb des DocumentRoot aufzubewahren.
Auch muss ich davon ausgehen, dass eine Datei (Tabelle) mit 5.000 Zeilen und 12 Spalten, was 5.000 Kunden entsprechen würde, irgendwann nicht mehr ausreicht.
Hinzu kommt auch noch, dass du dir um das Schreiben von konkurrenzfähigen Zugriffsmethoden Gedanken machen musst, was beim DBMS bereits erledigt ist.
Dabei fällt mir Ebay ein. Wieviele Mitglieder hat Ebay? Keine Ahnung, aber dies kann doch unmöglich mit txt-Dateien realisiert worden sein?
Darüber musst du dir keine Gedanken machen, so groß wird dein Projekt sicher nicht werden.
Auch gibt es Websites, auf denen hat man eine Funktion "Mitglieder suchen". Nun könnte man ca. 25 txt-Dateien anlegen, für jeden Buchstaben eine, und so das ganze für die Suchfunktion nach Anfangsbuchstaben optimieren. Problematisch wirds dann wieder, wenn man nach Anfangsbuchstaben ODER nach z.B. PLZ suchen könnte. Nach PLZ müsste die Suchfunktion trotzdem wieder alle Dateien durchsuchen. Ich glaube, MySql ist da komfortabler.
Ganz genau, all diese Funktionalität ist schon eingebaut und viele Jahre getestet.
Wenn ich das richtig verstehe, läuft es mit MySql etwa so:
Kunde 1 loggt sich ein
Datenbank wird geöffnet
Datenbank-_Verbindung_ wird hergestellt. Hinzu kommt beispielsweise noch das Aushandeln der zu verwendenden Zeichenkodierung.
es wird nach dem Nicknamen gesucht
wird er gefunden, werden die Passwörter verglichen
Man kann auch nach dem Datensatz in einer einzigen Abfrage suchen, der zum eingegebenen Loginnamen und dem Passwort passt.
stimmen sie überein, ist der Kunde eingeloggt und es wird eine session gestartet
"stimmen überein" äußert sich dann so, dass ein Datensatz gefunden wurde. Dem können nun je nach Bedarf weiter Kundendaten entnommen werden. Gab es keinen Datensatz, so gibt es den Loginnamen nicht oder das Passwort stimmte nicht. Diese beiden Fehler muss man nicht trennen, denn das macht es nur leichter, gültige Kundennamen zu finden.
Datenbank schliessen
Datenbank-_Verbindung_ wird geschlossen. Das macht PHP aber bei jedem Script-Ende von selbst.
Für jeden weiteren Kunden wäre es derselbe Vorgang. Theoretisch könnten also tausende von Kunden gleichzeitig auf die Datenbank zugreifen. Ist das überhaupt mit MySql möglich?
MySQL hat eine begrenzte Anzahl an gleichzeitigen Verbindungen. Da die Requests bei 5000 Kunden jedoch gehörig zeitversetzt ankommen, sollte das kein Problem sein.
Mit txt-Dateien geht das. Wenn man diese beim Auslesen nicht mit "flock" sperrt, können viele sie gleichzeitig auslesen.
Ein exklusives Sperren ist bei Änderungsvorgängen notwendig. Beim Lesen muss ein Shared Lock gesetzt werden, dann können andere Vorgänge ebenfalls lesen.
Und mit "$array = file('xxx.txt')" wird die Datei doch nicht automatisch gesperrt, oder?
Nein. Es wird auch nicht geprüft, ob eine Sperre vorliegt. Jedenfalls erwähnt das Handbuch nichts dergleichen, also muss man davon ausgehen, dass so etwas nicht passiert.
Lo!