hotti: PHP vs. Perl ->MySQL?

Beitrag lesen

hi,

Sorgen bereiten mir solche Dinge wie Race-Conditions, für den Fall, daß sich der Client z. B. (Ehefrau) Zuhause einlogt, und ihr Ehemann ebenfalls als Client von einem anderen Rechner (z. B. auf Arbeit) zeitgleich einloggt.

Logtable in einer Datei? Handler sperren mit LOCK_EX ;)
Du setzt einfach ein Lock auf den Handler, der wird automatisch wieder freigegeben, wenn der Prozess, welcher das Lock gesetzt hat, fertig ist.

Bei Bedarf kannst Du auch den ganzen Prozess locken, lege eine Datei namentlich fest und setze den Lock zu Beginn des Scripts. Somit kannst du auch DB-Zugriffe (mysql) atomar machen, wenn nur MyISAM-Tabellen zur Verfügung stehen. Ein eigenes Perl-Modul schreiben: Lock.pm

use Lock qw(auto);

MySQL kennt aber auch andere Mechanismen, z.B. Named Lock's.

Mit den selben Logindaten gibt es Probleme. Solche gleichzeitigen Logins müssten verhindert werden.

Soweit ich weis, ist es möglich eine Datei mehrfach für Lesebetrieb zu öffnen. Sollen aber Daten geändert werden, ist das solange kein Problem, wie nur einer drin ist.

Mach Dich mal ein bischen schlauer ;)

Bischen Code aus einem meiner Konstruktors (z.B. für die LogTable):

  
	eval{  
		$self->{FH}->open($file, O_RDWR|O_CREAT|O_BINARY) || die $!;  
		if($cfg{lock}){ flock($self->{FH}, LOCK_EX) || carp("Your system does not support flock()"); }  
		$self->_deserialize; # Hash komplett einlesen  
	};  

-> Stellt sicher, dass nur _ein_ Prozess die Logtabelle lesen und beschreiben darf. Der Nächste, der kommt, muss (kurz) warten. Das Alles erledigt flock().

Die Logins müssten also sauber getrennt werden. Double Login darf nie möglich sein.

Überdenke Deinen Login-Prozess. Z.B. so: User 'otto' meldet sich ein Zweitesmal an. Was könnte denn Passieren?

Fall a) die Session-ID ist dieselbe. Hier überschreibe ich lediglich den Anmeldezeitstempel (Verfallsdatum wird nur verlängert).

Fall b) 'otto' kommt mit einer neuen Session-ID. Hier mache ich einen neuen Eintrag.

Cleanup: Läuft immer dann, wenn ein Objekt zur LogTable erstellt wurde, da werden alle Einträge gelöscht, deren Verfallsdatum erreicht ist. Ein klarer Fall für den Destruktor der Klasse Login ;)

Ich habe früher CSV-Dateien von Perl selber einlesen und zurückschreiben lassen. Bei großen Projekten soll ein DBMS aber besser sein - warum eigentlich?

'Zig Tabellen vs. 'zig Dateien? Zu überlegen wäre das ''zig'. Andererseits ists eine Frage der Organisation, z.B. so (multidomain-fähiges Framework):

DB: Abhängig von $ENV{SERVER_NAME} wird das Data-Base-Handle an einen entsprechende DBase gebunden
FileSystem: Abhängig von $ENV{SERVER_NAME} wird der Ordner für die Dateien festgelegt

Ich hab da eher bedenken, die Kontrolle aus der Hand zu geben.

Wir kommen zur Frage der Sinnfälligkeit von OOP und Modulen...

Die HTML-Quelltextausgabe über Perl ist auch ein wenig nervig.

Ja. Überlege den Einsatz eines Template-Systems ;)

Von den Maskierungen mal abgesehen. BTW:Wie wird den Quellcode in PHP geschrieben? Ist das einfacher dort?

Frage diejenigen, die sich mit PHP rumschlagen ;)

Btw., ich habe mal einen einfachen Chat sowohl in Perl als auch in PHP geschrieben, etwa diegleiche Zeilenanzahl und beides gleichermaßen überschaubar.

Sonst ist Perl schon ne tolle Sache - vor allem die Module!

Ja! Vor Allem die Module, die selbst geschrieben sind ;)

Hotti

--
Wenn Du aus Fehlern lernen kannst, mach welche.