Rolf B: Warnung! Beware! Uwaga!

Beitrag lesen

Hallo MoaByter,

na, da tun sich eine Menge Fragen auf...

$a_auth = file("tn-auth", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
if (trim($a_auth[0]) == "tn-auth")# Dateiprüfung
{
   ...
}
else 
{
   ??? Was tust Du hier? Also:
   - wenn $a_auth FALSE enthält
   - wenn die erste Zeile nicht tn_auth enthält?
}

Erstens: Wie ist das Errorhandling für die tn_auth Datei? Würdest du es mitbekommen, wenn er in den oben skizzierten else-Pfad gelangte und deine große Prüfschleife ganz überspringt? Eine weiße Seite spricht dafür, dass das passiert sein könnte.

Zweitens: Die tn_auth Datei enthält User und Passworte. Ich nehme an, base64-codiert, andernfalls würde die Suche nach dem Zugang nicht funktionieren. Und ich nehme an, diese Datei wird von der Benutzerregistrierung gepflegt. Wie ist diese Datei initial auf den Server gekommen? Per FTP Upload? Wird das Trennzeichen ↔ (\u2194) korrekt übersetzt? Kommst Du überhaupt jemals über die if (count($x) < 2) continue; Abfrage hinweg? Du solltest diesen Code Schleife ggf. mal mit Echos spicken, um zu prüfen, was da genau verarbeitet wird. Ja, klar, dann klappt kein Redirect mehr. Aber um erstmal zu schauen, ob er korrekt durchs Programm läuft, ist das hilfreich.

Drittens: Aus welchem Himmel fällt $a_user? Das scheint ein Array zu sein, wo Benutzernamen und Zugangscodes drin stehen, und du suchst den Benutzernamen zu einem Zugangscode in $x[0].

  • Wo kommt a_user her? Steht da auf dem Server drin, was Du erwartest?
  • Warum baust Du x[0] in die Regexp ein? Ist das ein base64-codierter String? Warum trimmst Du ihn nicht? Oben, beim Vergleich mit aa_post["bname"], tust Du es.
  • Was ist, wenn ein Zugangscode ein Präfix eines anderen Zugangscodes ist (z.B. Zugangscode Wmlya3Vz (Zirkus) vs Wmlya3VzcGZlcmQ= (Zirkuspferd))? Da gehört ein $ ans Ende des Patterns (Anker für Ende des Strings)!
  • Warum das m-Flag? Das bezieht sich auf das Verhalten von ^ und $ in Strings, die Zeilenumbrüche enthalten - ist das hier relevant?

Viertens: Dein ob_start scheint mir unnötig. Zwischen ob_start und ob_end_flush steht nichts, was rechtmäßig Content-Ausgaben erzeugt - es sei denn, da erscheint eine PHP Fehlermeldung. Aber dann sollte diese Fehlermeldung vermieden werden.

Fünftens: Warum verwendest Du keine Datenbank für die Benutzerverwaltung? Das dürfte weniger schmerzhaft sein als das Gefummel mit Dateien. Alternativ könntest Du deine Daten auch als ordentliches assoziatives Array aufbauen, dieses Array mit serialize plattklopfen und in eine Datei dumpen. Zur Wiederverwendung liest Du einfach das Serialisat ein und machst mit unserialize() wieder ein Array draus. Die Alternative wäre json_encode und json_decode, um das Array als JSON-String zu speichern. Beide Varianten kümmern sich selbstständig um Zeilenumbrüche, Anführungszeichen und andere Merkwürdigkeiten.

Rolf

--
sumpsi - posui - obstruxi