PHPGangsta - Der praktische PHP Blog

PHP Blog von PHPGangsta


Archive for 2011

PHP 5.3 Feature: Late static binding (LSB)

with 9 comments

PHP 5.3 brachte unter anderem auch Late-Static-Binding (LSB). Ich würde tippen, dass einige von euch wissen was das ist, aber nur sehr wenige von euch dieses Feature bisher benötigt und eingesetzt haben. Ich möchte hier zwei kleine Beispiele zeigen, an dem klarer wird, wofür LSB benötigt wird:

class ClassA {
    public static function getName() {
        return self::name();
    }

    public static function getNameLSB() {
        return static::name();
    }

    public static function name() {
        return 'ClassA';
    }
}

class ClassB extends ClassA {
    public static function name() {
        return 'ClassB';
    }
}

echo ClassB::getName();       // ClassA
echo ClassB::getNameLSB();    // ClassB

Je nachdem ob self:: oder static:: genutzt wird, wird einmal die Elternmethode und einmal die Kindmethode aufgerufen. self:: bindet sich früh (beim Kompilieren) an seine Klasse, static:: erst bei der Ausführung (dann an die Kindklasse).

Weiterlesen »

Written by Michael Kliewe

April 17th, 2011 at 2:44 pm

Posted in PHP

Tagged with , , , ,

Passwortrichtlinien, was tun und was nicht?

with 54 comments

Vor kurzem bin ich wieder auf das leidige Problem „Passwortrichtlinien“ gekommen.

Erster Punkt: Xing
Das Minimum für das Passwort bei Xing beträgt 4 Zeichen. Von einer Pflicht, doch mindestens eine Zahl oder ein Sonderzeichen oder Großbuchstaben zu verwenden weit entfernt. Ist das nicht eine Einladung für Hacker/Cracker?

Zweiter Punkt: NGZ
Bei NGZ habe ich einen Account, um den Rootserver eines Bekannten zu administrieren. Immerhin können dort zusätzliche Accounts eingerichtet werden, und der Besitzer muss nicht seinen Login weitergeben. Allerdings wurde mir bei Benutzung der „Passwort vergessen“ Funktion mein Original Passwort per Email zugesandt! Sprich, Passwörter stehen dort im Klartext in der Datenbank, und sie werden in unverschlüsselten E-Mails durch das Internet geschickt und wohlmöglich von einigen per unverschlüsseltem WLAN abgeholt. Dann nützt auch https nichts für die Webseite.

Dritter Punkt: Sparkasse
Ich weiß ja nicht wie es bei euch ist, aber bei meiner Sparkasse muss man ein exakt 5-stelliges Passwort angeben. Das schränkt die Möglichkeiten sehr stark ein und ein wirklich sicheres Passwort ist damit nicht möglich. Selbst die Sonderzeichen sind auf öäüÖÄÜß beschränkt, warum nicht die anderen Sonderzeichen wie ()$%#+ usw? Warum zum Teufel tut das eine Bank?

Wie lauten eure Passwortrichtlinien, privat oder beruflich? Welche Schranken haltet ihr für zu niedrig und welche sind evtl. auch zu hoch? Wie speichert ihr Passwörter in der Datenbank, im Klartext, MD5/SHA1 gehasht, mit Salt oder ohne, oder sogar mehrfach gehasht? Welche „Passwort-vergessen“ Funktionalität haltet ihr für sinnig und welche für sinnlos bzw. sogar gefährlich?

Written by Michael Kliewe

April 15th, 2011 at 10:30 am

Ein paar Zend_Mail Tricks

with 12 comments

Wer Mails verschickt, nutzt bei sehr einfachen (Admin) E-Mails meistens die eingebaute mail() Funktion. Sobald es aber darum geht komplexere E-Mails zu versenden wird man wahrscheinlich eine Klasse benutzten, die es einem einfacher macht, Anhänge anzuhängen, einen text/plain und einen text/html Teil mitzusenden, zusätzliche Empfänger zu definieren oder inline-Bilder gleich mit in die Email zu packen.

Es gibt dutzende gute Mail-Klassen und Libraries da draußen (ezcMail, htmlMimeMail5), ich benutze häufig Zend_Mail. Mit den verschiedenen Zend_Mail_Transport_* Klassen ist es möglich, die Mails über sendmail (sprich über mail()) zu versenden, oder aber beispielsweise mit Hilfe des SMTP-Protokolls an einen SMTP-Server zu übergeben. Seit wenigen Monaten neu ist Zend_Mail_Transport_File, womit die E-Mail nicht versendet wird, sondern „nur“ in eine Datei geschrieben wird. Ich habe mir früher einen solchen Adapter selbst geschrieben, nun ist er im Zend Framework enthalten.

Mit diesem Adapter ist es sehr einfach möglich, beispielsweise in der Entwicklungsumgebung keine E-Mails zu versenden, damit nicht aus Versehen beim Testen des Abschickens eines Formulars wirkliche E-Mails versendet werden, sondern nur zu Debuggingzwecken in eine Datei geschrieben wird. Beispielsweise so:

Weiterlesen »

Written by Michael Kliewe

April 5th, 2011 at 9:18 am

Posted in PHP

Tagged with ,

Confoo 2011, die Mega Konferenz

without comments

Ihr sitzt zwar alle gerade wahrscheinlich vor eurer neuen PHPStorm Version oder programmiert eine Vier-Gewinnt-KI, aber trotzdem gibt es hier einige neue Präsentationen. Vom 6. bis zum 11. März 2011 fand zum zweiten Mal die Confoo in Montreal statt. Stolze 144 Talks, 3 Workshops und eine Keynote, bis zu 8 Sessions gleichzeitig, was für ein Programm. Einige der unten stehenden Präsentationen sind bereits bekannt, der größte Teil aber ist neues Futter zum Lesen, Lernen und Ausprobieren. Viel Spass dabei!

(Wer fehlende Präsentationen findet, bitte melden!)

06. März 2011

Using Linux tracing tools to analyse a LAMP stack
Yannick Brosseau

How to create social apps for millions of users
Bastian Hofmann

07. März 2011

Advanced PHP Development
Arne Blankerts, Stefan Priebsch, Sebastian Bergmann

Démarrer avec Symfony2
Hugo HAMON

Weiterlesen »

Written by Michael Kliewe

März 30th, 2011 at 8:16 am

Der Vier Gewinnt Server zur iBuildings Challenge

with 20 comments

ibuildings hat Anfang diesen Jahres einen Wettbewerb gestartet bei dem man ein möglichst gut spielendes Vier-Gewinnt PHP-Script erstellen soll. Der Einsendeschluss ist der 31.03.2011, ihr könnt also auch noch teilnehmen! Da ich auch eine KI erstellt habe (bin sehr gespannt auf das Ergebnis des Turniers) möchte ich hier meine kleine Vier-Gewinnt-Webseite vorstellen, die ich während der Umsetzung erstellt habe. Man kann hier gegen meinen Vier-Gewinnt-Server spielen, entweder auf der Webseite mit einem Javascript-Vier-Gewinnt-Frontend, oder aber mit einem PHP-Konsolen-Client.

Ihr könnt euch also auch an dieser Aufgabe probieren, eine KI in PHP zu erstellen, und dann gegen den Server anzutreten. Auf dem Server habe ich aktuell 4 Gegenspieler implementiert, die verschiedene Schwierigkeitsstufen haben:

  • Spieler 1: Rudi Random. Rudi wählt einfach per Zufall eine Spalte, die noch nicht voll ist, und wirft seinen Spielstein in die entsprechende Spalte. Dies entspricht der einfachsten Strategie, die auch bei der Challenge als Beispiel beigelegen hat.
  • Spieler 2: Philipp Percent. Philipp nutzt eine kleine Funktion, in der die mittleren Spalten eine höhere Wahrscheinlichkeit bekommen haben als die äußeren Spalten. So versucht er, zuerst Steine in der Mitte unterzubringen, und erst dann mit geringerer Wahrscheinlichkeit die äußeren zu belegen.
  • Spieler 3: Andi Avoid. Ähnlich Philipp Percent beruht die Strategie von Andi darauf, die innen liegenden Spalten bevorzugt zu belegen. Jedoch besitzt er die Fähigkeit, gegnerische Reihen aus 3 Spielsteinen zu erkennen und verhindert die Platzierung eines vierten Steins. Wenn er eine eigene Reihe aus 3 Steinen entdeckt, setzt er den 4. Stein und gewinnt.
  • Spieler 4: Michael Kliewe. Meine eingereichte Lösung zur ibuildings Challenge.

Die ersten drei Spieler haben offensichtliche Mängel und dienen dem leichten Aufwärmtraining. Gegen Spieler 4 habe ich erst wenige Spiele gewinnen können (als Mensch), mal sehen ob es jemand von euch mit der eigenen KI schafft.

Alle weiteren Informationen zur API usw. findet ihr auf der Webseite. Falls ihr einen weiteren Konsolenclient erstellt habt der schöner aussieht, oder einen besseres Javascript-Frontend gebaut habt, nur her damit, ich baue diese dann gern ein. Ihr könnt auch gern mein Git-Repository forken und dort den Konsolen-Client verbessern. Wer ein starkes Spielerscript erstellt hat kann mit den Code auch zukommen lassen, dann füge ich diesen als weiteren Gegenspieler zum Server hinzu.

Ich arbeite aktuell noch an einer Spieler-gegen-Spieler Variante, sodass ihr auch direkt gegeneinander spielen könnt. Das dauert aber wohl noch etwas. Auch würde ich noch gern eine Berechnung der ELO-Stärke aller Spieler einbauen, dazu müßte ich die Formeln aber erstmal verstehen 😉

Written by Michael Kliewe

März 27th, 2011 at 11:17 am