Installation Lighttpd mit PHP-FPM und MySQL

Lighttpd a.k.a. Lighty ist die schlanke Variante eines Webservers. Er hält sich mit Loggings zurück und verzichtet auf nützliche aber performance-killende Gimmicks wie das Parsen von .htaccess-Dateien usw.
Dadurch ist er gerade für umfangreiche Webauftritte die ideale Lösung.

Diese Anleitung zeigt am Beispiel eines Ubuntu 12.04-Servers, wie man den Lighty installiert, konfiguriert und mit den nötigen Modulen wie PHP-FPM, Rewrite-Funktionen und MySQL-Unterstützung versieht.

Weiterlesen»

MySQL FROM_UNIXTIME und negative Timestamps

Seit der MySQL-Version 4 liefert die Funktion FROM_UNIXTIME([UNIX-Timestamp) für negative UNIX-Timestamps „NULL“ zurück. Das ist natürlich unschön, da manche Datums-Funktionen über MySQL wesentlich schneller und einfacher zu realisieren sind als bspw. mit PHP.

Abhilfe schafft hier ein kleiner Umweg über die Funktion DATE_ADD(). Diese ermöglicht es, einem beliebigen Datum eine zu definierende Zeitspanne hinzuzuaddieren.

Statt nun also der Funktion FROM_UNIXTIME() die Spalte mit dem UNIX-Timestamp als Parameter zu übergeben, kann man mit

DATE_ADD(FROM_UNIXTIME(0),INTERVAL [Spalte mit dem UNIX-Timestamp] SECOND)

dafür sorgen, dass man stets den korrekten Wert auch für Daten vor dem 01.01.1970 erhält.

mySQL und die Zeit

Oft wurstelt man bei der Entwicklung mit UNIX-Timestamps für Zeitangaben herum. Das ist kein Hexenwerk, aber direkt das Gelbe vom Ei ist es auch nicht. Speziell zur Implementierung von Zeit- und Datums-Filtern benötigt dieser Lösungsansatz eine Menge Logik, die in PHP gegossen werden muss (Schaltjahre, Schaltsekunden, …). Das Herumrechnen damit ist mühsam und sorgt oft für Knöten im Hirn.

Dies kann man wesentlich einfacher haben. mySQL kommt mit einer großen Vielfalt von Datums- und Zeitfunktionen daher, derer man sich wunderbar bedienen kann. Wenn man sich zum Beispiel die Funktion

TIMESTAMPADD()

ansieht, wird man schnell merken, dass diese Funktionen das Entwicklerleben erheblich vereinfachen können. Musste man früher mühsam herumrechnen, um bspw. ein Jahr zu einem gegebenen Datum hinzuzuaddieren, funktioniert das mit

SELECT TIMESTAMPADD(YEAR,1,'2012-01-03')

völlig problemlos – und das Beste: Schaltjahre, -Sekunden und dergleichen sind schon drin. Ein anderes Beispiel: Oft sollen Daten im Monatsraster dargestellt werden. Mit PHP mühsam, mit mySQL eine etwas ausführlichere WHERE-Klausel:

[...] WHERE `date`>SELECT TIMESTAMPADD(day,1,LAST_DAY(TIMESTAMPADD(month, -1, NOW()))) AND `date`<=LAST_DAY(NOW()) [...]

Dieser Where-Klausel liefert alle Datensätze, die im aktuellen Monat liegen, mit einigen Handgriffen kann man sie so erweitern, dass allein ein übergebener Parameter wie bspw. die Angabe, der wievielte Monat vor dem aktuelle angezeigt werden soll, die Filterung schon komplett macht.

Sollte doch einmal – aus welchen Gründen auch immer – der UNIX-Timestamp nötig sein, kann man sich diesen für ein beliebiges Datum mittels der Funktion

UNIX_TIMESTAMP()

zurückgeben lassen. Will man auch so nette Gimmicks wie bspw.

DATE_FORMAT()

nutzen, ist es sinnvoll, vorher die Systemvariable für die Darstellung von Monats- und Tagnamen über

SET SESSION lc_time_names=de_DE

entsprechend zu definieren. Auf diese Weise kann man sich den Unwägbarkeiten der PHP-Datumsfunktionen einfach und nachhaltig entziehen.

Viele weitere Funktionen und genauere Infos kann man der mySQL-Dokumentation entnehmen.