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»
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»
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.
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.
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;
} |
/**
* 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;
} |
/**
* 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;
}