PHP 5.5: Was sich für vorhandene Web-Software ändert

Stefan Keller, den 1. April 2013
php-Logo
php-Logo

Inzwischen ist die zweite Beta-Version von PHP 5.5 verfügbar. Wie schon in der letztes Jahr erschienenen Version 5.4 werden sich wieder Kleinigkeiten ändern, mit denen sich Web-Entwickler möglichst frühzeitig auseinandersetzen sollten. Wir möchten euch zeigen, welche Änderungen notwendig werden und was PHP 5.5 Neues bringt.

Allgemeine Änderungen

Zunächst einmal bleibt festzuhalten, dass PHP ab Version 5.5 keine offizielle Unterstützung für Windows XP und Windows Server 2003 mehr mitbringt. Für die meisten Anwender bzw. Administratoren dürfte diese Änderung weniger ins Gewicht fallen, für (Hobby-)Entwickler, die auf Entwicklungsplattformen wie XAMPP setzen, könnte dies aber schon eine Einschränkung bedeuten. Je nach Statistik genießt Windows XP nach wie vor einen Marktanteil von um die 40 Prozent.

Veraltete Funktionen

Der Entwicklungszyklus von PHP hat sich geändert: Änderungen an der Sprache, die eigentlich für PHP 6 vorgesehen waren, wurden in kleinere Feature-Updates aufgenommen und PHP 6 auf einen unbekannten Zeitpunkt in der Zukunft verschoben. Da es dennoch gilt, den Quellcode aufzuräumen, wurden einige Funktionen als „deprecated“ erklärt – aus Gründen der Kompatibilität sind sie noch enthalten, aber Entwickler werden dazu angehalten, jene Funktionen zu ersetzen. Andernfalls wird eine Deprecated-Notice geworfen, falls dies nicht per error_reporting() unterbunden wird.

Zugriff auf MySQL

Den Anfang macht ein kleiner Paukenschlag: Die MySQL-Funktionen wurden als deprecated gekennzeichnet. Damit werden Entwickler dazu angehalten, ihre Datenbankschnittstellen anzupassen. Weiterhin in Ordnung ist die Verwendung von MySQLi (sowohl objektorientiert als auch prozedural). Im Idealfall sollten Entwickler ihre Software aber auf das PHP Data Object (PDO) umstellen, das mit einer einheitlichen Schnittstelle viele neue Features bringt. MySQLi ist seit PHP 5 verfügbar und benötigt MySQL 4.1.13 bzw. 5.0.7 oder neuer. Um prozedurale MySQL-Funktionsaufrufe umzuschreiben, muss beachtet werden, dass sich die Reihenfolge der Parameter gegenüber den alten mysql_*-Funktionen geändert hat. Am einfachsten lässt sich eine Web-Software dann umschreiben, wenn eine eigene MySQL-Klasse zum Einsatz kommt, weil die Aufrufe im Quelltext dann unverändert beibehalten werden können.

Zeitzonenformate

Ebenfalls deprecated ist nun die Methode IntlDateFormatter::setTimeZoneId() sowie dessen prozeduraler Alias datefmt_set_timezone_id(). Diese Funktionen wurden erst mit PHP 5.3 eingeführt und sollten spätestens ab PHP 5.5 nicht mehr verwendet werden. Stattdessen schlagen die Entwickler die Verwendung von IntlDateFormatter::setTimeZone() bzw. datefmt_set_timezone() vor. Diese haben sich im Syntax nicht geändert. Da beide Ersatzfunktionen erst mit PHP 5.5 Einzug gehalten haben, sollten Web-Programme, die datefmt_set_timezone_id() verwenden, mit einer Versionsabfrage ausgestattet werden.

Verschlüsselungsfunktionen

Eine weitere Reihe von nicht mehr zu verwendenden Funktionen beginnt mit dem Präfix mcrypt_*. Genauer gesagt sind es mcrypt_ecb(), mcrypt_cbc(), mcrypt_cfb() und mcrypt_ofb(), die nicht mehr verwendet werden sollten. Anstelle der genannten Funktionen soll man nach dem Willen der PHP-Entwickler mcrypt_generic() bzw. mdecrypt_generic() verwenden.

e-Modifier in preg_replace()

Mit der Begründung, dass der e-Modifier in regulären Ausdrücken innerhalb der preg_replace()-Funktion schnell Sicherheitslücken im Quellcode produzieren kann, wurde jener Modifier nun als deprecated erklärt. Mit ihm war es möglich, das Ergebnis eines regulären Ausdrucks im „replacement“-Parameter der Funktion durch eine weitere PHP-Funktion zu transportieren. Wenn der Programmierer hierbei aber nicht aufpasst und der Angreifer den Quellcode kennt, ist es möglich, auf diese Weise beliebigen PHP-Code auszuführen und so etwa an sensible Informationen zu kommen oder Daten zu ändern. Die PHP-Entwickler schlagen als Ersatz für den gewünschten Einsatzzweck die Funktion preg_replace_callback() vor. Damit wird es deutlich komplizierter, versehentlich Sicherheitslücken im Quelltext zu hinterlassen. Da die Funktion schon seit PHP 4.0.5 zur Verfügung steht, sollte eine Anpassung vorhandener Programme kein Problem darstellen.

Neue Funktionen in PHP 5.5

Neben behobenen Fehlern und Aufräumarbeiten im PHP-Interpreter gibt es eine Reihe von neuen Funktionen, die erst in Version 5.5 eingeführt werden. Darunter fällt unter andere, die Zend Opcache Erweiterung. Diese soll die Ausführungsgeschwindigkeit von PHP-Programmen erhöhen, ohne deren Eigenschaften zu beeinflussen. Dabei wird der PHP-Code nicht wie üblich bei jedem Aufruf neu interpretiert, sondern kompilliert und dann immer in Maschinensprache direkt ausgeführt. Die Erweiterung ist dabei so schlau, die PHP-Datei bei einer Veränderung neu zu kompillieren.
Weiterhin wurde mit array_column() eine neue Funktion eingeführt, die ähnlich funktioniert wie das aus MySQL bekannte mysql(i)_fetch_array(). Ein mehrdimensionales, aber in sich immer gleich aufgebautes, Array kann so automatisch um bestimmte Felder erleichtert werden. Ausführliche Beispiele dafür gibt es in der RFC-Abteilung von php.net.
Ebenfalls nicht uninteressant ist eine Änderung der Spielregeln bei der foreach()-Anweisung. Hier ist es ab PHP 5.5 möglich, Keys im non-skalaren Format anzugeben.

Fazit und Ausblick

Dadurch, dass sich die PHP-Projektleitung dazu entschlossen hat, kleinere Schritte bei der Entwicklung zu gehen, müssen Entwickler von Web-Software zwar eher auf der Hut sein, was Änderungen an der Sprache angeht. Dafür fallen die notwendigen Änderungen für jedes Update relativ übersichtlich aus. Vor wenigen Tagen wurde die zweite Beta-Version von PHP 5.5 für alle möglichen Plattformen veröffentlicht, das PHP-Team rechnet damit, eine dritte Beta-Version am 11. April zu verteilen.


Ähnliche Nachrichten