Eclipse kann Update-Sites nicht erreichen

Wer – wie ich und viele andere – auf Eclipse als Entwicklungs-IDE setzt, wird früher oder später auch auf die Tücken und kleinen Stolperfallen der Freeware-Lösung stoßen.

Eine davon – wenn man Google und verschiedenen Foren glaub darf – ist schon mehrfach aufgetreten, auf die richtige Lösung zu stoßen ist jedoch Glückssache. Es geht darum, über Eclipse weitere Plugins wie bspw. Subversion oder auch die PHP Development-Tools nachzuinstallieren. Gerade bei DualStack-Arbeitsrechnern – also denen, die sowohl via IPv4 als auch IPv6 angebunden sind – funktioniert das nicht ohne weiteres. Eclipse wird den Dienst mit der Fehlermeldung

Unable to read repository at http://subclipse.tigris.org/update_1.8.x/content.xml.
Unable to read repository at http://subclipse.tigris.org/update_1.8.x/content.xml.
Connection reset

verweigern. Ganz offensichtlich hat Eclipse und/oder Java hier ein Problem, eine stabile Verbindung hinzubekommen. Die Lösung ist einfach – wenn man sie kennt, nämlich des festlegen der Verbindung über IPv4. Dies realisiert man über einen Eintrag in der eclipse.ini im Eclipse-Verzeichnis:

-Djava.net.preferIPv4Stack=true

Wichtig: Es gibt Quellen, die diesen Eintrag als „-Djava.net.preferIPv4Stack = true“ angeben. Das ist FALSCH, die Leerzeichen vor und/oder nach dem Gleichheitszeichen machen diesen Parameter ungültig und damit wirkungslos. Es ist EIN EINZIGER Parameter, der als ein kompletter String weitergegeben werden muss.

Danach einen gegebenenfalls vorhandenen Cache in

<Eclipse-Pfad>\p2\org.eclipse.equinox.p2.repository\

löschen und Eclipse neustarten. Über „Help“ -> „Install New Software“ kann man nun wie gewohnt Eclipse-Repositories und Update Sites pflegen und abrufen.

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.

Merkzettel PHP eaccelerator und ioncube_loader

eAccelerator ist erst ab Version 0.9.6.1 zum ioncube_loader kompatibel.
Der ioncube_loader darf dann aber nicht via „extension=ioncube….so“ eingebunden werden (wie im HowTo beschrieben) sondern muss ueber „zend_extension=“/var/lib/php/…./ioncube….so“ in die php.ini eingetragen werden.

PHP 5.3.3 mit nativem php-fpm bauen

Als Merkzettel:

cd /usr/local/src/
wget 'http://de.php.net/get/php-5.3.3.tar.bz2/from/this/mirror'
tar jxf php-5.3.3.tar.bz2
export CFLAGS='-O3 -mtune=core2 -mmmx -msse -msse2 -msse3 -fexpensive-optimizations -ftree-loop-optimize -ftree-vectorize -ftree-vectorizer-verbose=5'
export CXXFLAGS=$CFLAGS
wget 'http://download.suhosin.org/suhosin-patch-5.3.3-0.9.10.patch.gz'
gunzip suhosin-patch-5.3.3-0.9.10.patch.gz
cd php-5.3.3
patch -p 1 -i ../suhosin-patch-5.3.3-0.9.10.patch
./buildconf
./configure  --prefix=/usr/local/php533 -with-libdir=lib64 --with-openssl --with-zlib --enable-bcmath --with-bz2 --enable-calendar --with-curl --enable-dba=shared --enable-exif=shared --with-pcre-regex --enable-ftp=shared --with-gd=shared --with-jpeg-dir --with-png-dir --with-zlib-dir --with-xpm-dir --with-freetype-dir --with-gettext --with-imap=shared,/usr --with-imap-ssl --with-kerberos --enable-mbstring --with-mcrypt=shared,/usr --with-mhash=shared,/usr --with-mysql=shared --with-mysqli=shared --with-pdo-mysql=shared --with-pspell=shared,/usr --enable-soap --enable-sockets --enable-sqlite-utf8 --enable-sysvmsg --enable-sysvsem --enable-sysvshm --with-tidy=shared,/usr --enable-wddx --with-xmlrpc=shared --with-libexpat-dir --with-iconv-dir --enable-zip --with-pear --enable-zend-multibyte --enable-fpm --enable-gd-native-ttf --with-fpm-user=www-data --with-fpm-group=www-data --with-config-file-path=/usr/local/lib --with-config-file-scan-dir=/etc/php5/conf.d
make -j3
make test
make install
cd ..
wget 'http://pecl.php.net/get/memcache-2.2.5.tgz'
tar zxf memcache-2.2.5.tgz
cd memcache-2.2.5
export PHP_PREFIX="/usr/local/php533"
$PHP_PREFIX/bin/phpize
./configure --with-php-config=$PHP_PREFIX/bin/php-config
make -j2
make install
cd ..
wget 'http://bart.eaccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.tar.bz2'
tar jxf eaccelerator-0.9.6.1.tar.bz2
cd eaccelerator-0.9.6.1
$PHP_PREFIX/bin/phpize
./configure --enable-eaccelerator=shared --without-eaccelerator-use-inode
 --with-php-config=$PHP_PREFIX/bin/php-config
make -j2
make install
cd ..

URL Rewrite Regeln fuer lighttpd und TYPO3

Hier der Regelsatz, der auch mit wkhtmltopdf und diversen News Extensions klarkommt:

url.rewrite-once = (
                        "^/(typo3|info/|typo3temp/|typo3conf/|uploads/|fileadmin/|t3lib/|robots\.txt|clear\.gif|favicon\.ico).*$" => "$0",
                        "^/$" => "index.php",
                        "^typo3$" => "typo3/index_re.php",
                        ".html\?([^*]+)" => "index.php?$1",
                        ".html$" => "index.php",
                        "^([^*]+)\.([^*])+\.html\?([^*]+)$" => "index.php?id=$1&type=$2&$3",
                        "^/.*\?([^*]+)" => "index.php?$1",
                        "^/.*$" => "index.php",
)