Installation Apache2, PHP5 und MySQL

Dieser Artikel widmet sich der Installation eines Apache2 mit Mod-PHP und MySQL auf einem Ubuntu 12.04-Server.
Um einen Webserver von Grund auf zu installieren, gibt es zwei Möglichkeiten. Apache2 mit Mod-PHP oder Lighttpd mit PHP-FPM.
Die Installation eines Lighty mit allem drum und dran ist im Beitrag „Installation Lighttpd mit PHP-FPM und MySQL“ ausführlich beschrieben.

Weiterlesen»

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.

TYPO3 Swiftmailer – Fallstricke

Nachdem ich jetzt für das Kontaktformular über die Thematik gestolpert bin, will ich das natürlich niemandem vorenthalten:

Nutzt man den neuen TYPO3-Swiftmailer und will damit mails an mehrere Empfänger verschicken so ist es ratsam, für jede zu versendende Email eine eigene Instanz des Swiftmailers zu erzeugen.

Hintergrund: Beim Versenden einer Mail an mehr als einen Empfänger über die selbe Klasse erhält jede Nachricht die selbe Message-ID. Das kann bei Exchange-Nutzern oder möglicherweise auch bei Freemail-Usern zu Problemen führen.

Behält man dies im Hinterkopf, funktioniert der Swiftmailer problemlos.

Direct Mail, Empfängerlisten im CSV-Format werden nicht erkannt

Nachdem wir ja nun das eine oder andere Mal Direct Mail einsetzen, stolpert man vielleicht irgendwann mal darüber, dass Direct Mail einfache Listen im CSV-Format nicht korrekt erkennt. Der Grund liegt hier in einer Unverträglichkeit von Direct Mail und gewissen PHP-Versionen, siehe Auszug aus typo3conf/ext/direct_mail/res/scripts/class.tx_directmail_static.php (Zeile 764ff.)

/**
 * parsing csv-formated text to an array
 *
 * @param	string		$str: string in csv-format
 * @param	string		$sep: separator
 * @return	array		parsed csv in an array
 */
function getCsvValues($str,$sep=',')	{
	$fh=tmpfile();
	fwrite ($fh, trim($str));
	fseek ($fh,0);
	$lines=array();
	if ($sep == 'tab') $sep = chr(9);
	while ($data = fgetcsv ($fh, 1000, $sep)) {
		$lines[]=$data;
	}
	return $lines;
}

Der Aufruf der PHP-Methode tmpfile() schlägt aufgrund eines PHP-Bugs (das temporäre Verzeichnis ist falsch gemappt) u. U. fehl sodass die weiteren Funktionen ebenfalls vor die Wand fahren.
Ein Workaround hierfür wäre, die Klasse zu patchen:

/**
 * parsing csv-formated text to an array
 *
 * @param       string          $str: string in csv-format
 * @param       string          $sep: separator
 * @return      array           parsed csv in an array
 */
function getCsvValues($str,$sep=',')    {
	$fh = fopen(realpath(dirname(__FILE__)).'/direct_mail','w+');
	fwrite ($fh, trim($str));
	fseek ($fh,0);
	$lines=array();
	if ($sep == 'tab') $sep = chr(9);
	while ($data = fgetcsv ($fh, 1000, $sep)) {
		$lines[]=$data;
	}
	return $lines;
}