Configure Parameter für PHP 5.3.6
Etwas, an dem ich auch schon etwas länger sitze. Die optimale Konfiguration von PHP. Ich gebe zu, auch mit dem Hintergedanken zur Zend Certified Engineer Zertifizierung, die ich durchstarten werde, sobald ich wieder etwas Luft habe. Man lernt eben beim stöbern im Manual immer mal wieder was neues.
Sicherlich nicht perfekt, aber ich denke ein guter Anfang. Folgendes Setup läuft derzeit produktiv auf einem Ubuntu 8.04 LTS mit Lighttpd bei HostEurope (und warscheinlich in Zukunft auch auf einigen weiteren unserer Webserver):
'./configure' \ '--prefix=/usr' \ '--with-config-file-path=/etc/php5/cgi/' \ '--with-config-file-scan-dir=/etc/php5/cgi/conf.d/' \ '--mandir=/usr/share/man' \ '--disable-debug' \ '--with-regex=php' \ '--disable-rpath' \ '--disable-static' \ '--with-pic' \ '--with-layout=GNU' \ '--with-pear=/usr/share/php' \ '--enable-calendar' \ '--enable-sysvsem' \ '--enable-sysvshm' \ '--enable-sysvmsg' \ '--enable-bcmath=shared' \ '--with-bz2=shared' \ '--enable-ctype=shared' \ '--without-gdbm' \ '--with-iconv=shared' \ '--enable-exif=shared' \ '--enable-ftp=shared' \ '--with-gettext=shared' \ '--enable-mbstring=shared' \ '--enable-mbregex' \ '--with-pcre-regex=/usr' \ '--enable-shmop=shared' \ '--enable-sockets' \ '--enable-wddx=shared' \ '--with-libxml-dir=/usr' \ '--with-zlib' \ '--with-kerberos=shared,/usr' \ '--with-openssl=/usr' \ '--enable-soap=shared' \ '--enable-zip=shared' \ '--with-exec-dir=/usr/local/php/bin' \ '--without-mm' \ '--with-curl=shared,/usr' \ '--with-zlib-dir=/usr' \ '--with-gd=shared,/usr' \ '--with-gmp=shared,/usr' \ '--with-jpeg-dir=/usr' \ '--with-xpm-dir=/usr/X11R6' \ '--with-png-dir=/usr' \ '--with-freetype-dir=/usr' \ '--with-t1lib=shared,/usr' \ '--with-ldap=shared,/usr' \ '--with-ldap-sasl' \ '--with-mhash=shared' \ '--with-mysql=mysqlnd' \ '--with-mysqli=mysqlnd' \ '--with-pspell=shared,/usr' \ '--with-xsl=shared,/usr' \ '--with-snmp=shared,/usr' \ '--with-sqlite=shared,/usr' \ '--with-mssql=shared,/usr' \ '--with-tidy=shared,/usr' \ '--with-xmlrpc=shared' \ '--with-pgsql=shared,/usr' \ '--enable-gd-native-ttf' \ '--with-openssl-dir=/usr' \ '--enable-gd-jis-conv' \ '--enable-json' \ '--with-mcrypt=shared,/usr' \ '--enable-pcntl=shared' \ '--enable-pdo' \ '--with-pdo-mysql=mysqlnd' \ '--with-pdo-sqlite' \ '--with-pdo-pgsql=shared,/usr' \ '--enable-xmlreader=shared' \ '--with-tsrm-pthreads' \ '--with-recode=shared' \ '--disable-phar' \ '--disable-posix' \ '--disable-short-tags' \ '--enable-fast-install'
Und nun die Gedanken dahinter:
- Grundsätzlich erstmal ein möglichst schlanker Core, indem unnötiges entfernt wird
- CGI/FastCGI, da das System mit Lighttpd und mod_fastcgi betrieben wird
- SQLite und MySQL/MySQLi werden als meistbenutzte Datenbankinterfaces fest implementiert
- Ebenso die PDO-Datenbanktreiber für MySQL und SQLite
- Für die MySQL/MySQLi-Funktionen sowie für PDO werden die neuen, nativen „mysqlnd“ Treiber verwandt. Diese bieten eine verbesserte Performance und sind Ressourcenschonender als libmysql
- Aus Sicherheitsgründen werden die Posix-Funktionen deaktiviert, die PCNTL-Funktionen als Shared gebaut (für CLI-Zwecke)
- PHAR wird deaktiviert. Ist zwar eine schöne Idee, aber auf Produktiv-Systemen nicht zu gebrauchen
- Zum Rest: Was ansonsten nicht auf allen Webseiten/virtuellen Hosts gebraucht wird und somit nicht direkt im Core einkompiliert sein muss, wird als Shared Module kompiliert
Gebaut wird das ganze für Debian/Ubuntu folgendermaßen:
cd /usr/src wget http://de.php.net/distributions/php-5.3.6.tar.gz tar -vxf php-5.3.6.tar.gz cd php* ./configure... make checkinstall -D --install=no --fstrans=no --maintainer=cmon2k@sysadmin.local --reset-uids=yes --nodoc --pkgname=php5 --pkgversion=5.3.6 --pkgrelease=t4e-`date +%Y%m%d%H%M` --arch=amd64 dpkg -i php5_*.deb
Abschließend noch einige PEAR-Pakete, einige PECL-Extensions (APC usw.) nachinstallieren und man hat schon ein recht nettes PHP-Setup. Natürlich sollte man vor allen Arbeiten nicht vergessen die alten PHP-Pakete aus den Distributions-Repositorys zu deinstallieren.