PHP5 unter Apache auf MacOSX aktivieren

Da Apache-Webserver und PHP5 schon im Lieferumfang von MacOSX enthalten sind, ist es recht einfach diese zu benutzen. Der Apache-Webserver kann einfach über die Freigabeinstellungen gestartet werden. Für PHP5 muss folgende Zeile im Terminal eingegeben werden:

# PHP5 aktivieren
sudo apxs -e -n php5 -a libphp5.so

# PHP5 deaktivieren
sudo apxs -e -n php5 -A libphp5.so

Danach einfach den schon vorhandenen Apache-Webserver (Webfreigabe) in den Systemeinstellungen unter Freigabe starten oder neu starten und schon kann PHP benutzt werden.

Alter in MySQL berechnen

Als erstes wird eine Tabelle für die Benutzer erstellt. Hier im Beispiel benutzen ich nur die 3 Spalten id, nick für den Benutzernamen und birthday für das Geburtsdatum.

CREATE TABLE accounts(
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
nick VARCHAR(32) NOT NULL,
birthday DATE NULL,
UNIQUE(nick)
);

Um den Benutzernamen und das Alter aller Benutzer auf der Tabelle „accounts“ auszulesen wird dann folgender Query benutzt:

SELECT
nick,
YEAR(NOW()) - YEAR(birthday) - IF(DATE_FORMAT('%m-%d', NOW()) > DATE_FORMAT('%m-%d', birthday), 0, 1) AS age
FROM
accounts

Es wird dann folgendes (für meine Benutzer „foo“ und „bar“) Ausgegeben:

nick birthday age
foo 1980-05-01 26
bar 1984-04-04 22

PHP 5.2 erschienen

PHP ist in der neuen Version 5.2 erschienen. Enthalten sind viele neue Funktionen, Sicherheitsupdates und Veränderungen, die der Performance zu gute kommen sollen.

Die Bibliotheken für SQLite und PCRE wurden auf den aktuellen Stand gebracht. Unter Windows wurden auch noch OpenSSL, MySQL und PostgreSQL aktualisiert.

Es gibt drei neue Erweiterungen. Filter ist für die Validierung von Benutzereingaben gedacht, JSON hilft beim Datenaustausch mit Javascript, der z.B. bei Ajax nötig ist und Zip erleichtert den Umgang mit ZIP-Archiven.

Für include() und require() gibt es nun in der php.ini eine zusätzliche Einstellung allow_url_include hinzugekommen, mit der sich verhindern lässt das nicht lokale Dateien in das aktuelle Script eingefügt werden und sich somit ungewollt fremder Code ausführen lässt.

Auch wurden noch über 200 weitere kleinere Fehler ausgebessert, die für höhere Sicherheit und eine bessere Geschwindigkeit sorgen.

Quelle:
Golem: PHP 5.2 bringt neue Funktionen
Heise: PHP 5.2.0 bringt Sicherheitsfixes und neue Funktionen
PHP.net ChangeLog
PHP.net Homepage

MySQL-Queries in PHP sichern

Da es immer wieder Probleme mit SQL-Injections kommt, habe ich hier eine recht einfache Lösung, die ausreichend für die Absicherung von MySQL-Queries sein sollte.

function mysql_queryf()
{
    $args   = func_get_args();
    $query = array_shift($args);
    $args   = array_map('mysql_real_escape_string', $args);
    $query = vsprintf($query, $args);
    return mysql_query($query);
}

Benutzt wird das ganze dann so. Es muss nur darauf geachtet werden, das sich im ersten Parameter, dem Query die entsprechenden Platzhalter benutzt werden.

mysql_queryf("
    INSERT INTO
        guestbook(title, description, created)
    VALUES
        ('%s', '%s', NOW());",
    $title,
    $description
);

Es werden die üblichen Platzhalter von sprintf wie %s für String, %d für einen signed Integer, %u für einen unsigned Integer oder %F (nicht %f) für einen Float benutzt. Der Vorteil ist, dass die Platzhalter einen Query evtl etwas übersichtlicher machen, da sich nicht mehr soviele Anführungszeichen und PHP-Funktionen zum sichern der Variablen im Query befinden und zusätzlich wird jede Variable automatisch für die Datenbank escaped.

Die Funktionen addslashes(), str_replace(), preg_replace() usw. sind nicht zum Absichern von Queries geeignet.