PHP 5.1+ Neuerungen (PDO, Date, XML, Unicode)
Andreas Korthaus
- zur info
Hallo!
Grad habe ich Andi Gutmans Blog-Eintrag zum Release von PHP 5.1-beta1 gelesen und mir gedacht, dass es den ein oder anderen hier ja möglicherweise interessieren könnte.
Die wichtigsten neuen Features von 5.1 sind wohl:
<?php
$dsn = 'sqlite:/pfad/zur/datenbank'; // analog für mysql, postgresql, oracle, ...
$dbh = new PDO($dsn);
$result = $dbh->query('SELECT col FROM table');
foreach ($result as $row) {
print_r($row);
}
?>
Der PHP-Code sieht für jede DB gleich aus, unterscheidet sich lediglich im DSN-String. So wird immer dieselbe, objektorientierte API benutzt (heutige APIs unterscheiden sich teilweise erheblich), und gleichzeitig ist der Code (mindestens) genau so schnell wie mit DB-spezifischen Client-APIs (z.B. mysql_*()...), wobei das bei DB-Zugriff natürlich nicht das wichtigste ist. Es ist keine SQL-Abstraktion wie PEAR::DB, SQL wird nicht angefasst (es geht halt um die Vereinheitlichung/Vereinfachung der API, sowohl für PHP-Programmierer, als auch DB-Extension Programmierer).
Eine Einführung in PDO: http://netevil.org/talks/index.php?t=pdo
PDO-Manual: http://www.php.net/pdo
PDO-Wiki: http://wiki.cc/php/PDO
<?php
$date = new Date(12,6,1880);
$date->setDay(13);
echo $date->getWeekDay();
echo $date->day;
echo $date->month;
?>
mehr Beispiele: http://cvs.php.net/co.php/pecl/date/docs/examples/sample1.php?r=1.2
XMLReader: eine IMHO schöne API zum Lesen großer XML-Dateien (evtl. auch XMLWriter)
Beispiele im CVS: http://cvs.php.net/pecl/xmlreader/examples/
Übersicht, XML in PHP 5.1: http://php5.bitflux.org/xmloncrack/title.php
diverse Performance-Verbesserungen (ich habe Scripte die alleine durch den Austausch von 5.0.4 gegen 5.1-beta1 über 40% schneller liefen! Trifft natürlich nicht auf alle Scripte zu...). In PHP 5.0 wurde mit der ZE2 erstmal alles umgebaut, Ziel war es erstmal die neue OOP zu unterstützen... Patches bzgl. Performance/Optimierung sind dann in 5.1 eingeflossen.
Interessant ist auch, wie es nach PHP 5.1 weitergehen soll. Und zwar soll es in der nächsten Version umfassenden Unicode-Support geben: sehr interessante Präsentation von Andrei Zmievsk. Wird wohl auf ICU basieren, in der Präsentation stehen einige Beispiele wie das dann später aussehen wird. Jedenfalls funktionieren dann so Sachen wie strlen($str) oder $str{1} problemlos mit Unicode. Bin ich mal gespannt, ich denke ich warte noch so lange und fange erst gar nicht an mit den nervigen mb_* Funktionen... ;-)
Da Unicode-Support inzwischen schon zu einem großen Teil implementiert ist, werden diese Änderungen nach dem endgültigen Release von PHP 5.1 ins CVS eingefügt.
Und dann gibts da noch ein (IMHO interessantes) Interview mit Wez Furlong (Podcast, mp3), ist allerdings leider keine gute Qualität.
Naja, vermutlich stellen heute viele Provider noch nichtmal PHP 5.0 zur Verfügung, wobei ich das zumindest in meinem Fall nicht bestätigen kann: Inzwischen bieten alle Provider wo ich PHP-Scripte liegen habe an PHP 5.0 zu verwenden. Und auch mit der Migration hatte ich bisher noch keine Probleme, ich musste kein einziges eigenes Script verändern. Problematischer sind manchmal größere objektorientierte Bibliotheken, wovon die meisten aber inzwischen auch php5-fähig sein sollten. Inzwischen läuft bei mir so ziemlich alles mit PHP 5.0.
Viele Grüße
Andreas
Hallo!
Natürlich kann man sich PHP 5.1-beta1 auf php.net herunterladen, aber man kann die meisten neuen Extensions auch mit PHP 5.0 verwenden. Die Extensions werden ja inzwischen fast alle in PECL entwickelt (d.h. unabhängig von PHP Release-Zyklen), und bei Bedarf in den PHP-Kern verschoben, genau so werden immer mehr alte/selten verwendete Extensions aus dem Core nach PECL verschoben.
Wie PECL-Extensions installiert werden, wird im Manual beschrieben: http://de3.php.net/manual/en/install.pecl.php
in den meisten Fällen funktioniert es genau so einfach wie mit PEAR-Paketen, heißt also ein einfaches
pear install EXTENSION
(http://pear.php.net/manual/de/installation.cli.php) Die manuelle Methode ist im Manual oben beschrieben.
Windows-User benötigen DLLs. Davon findet man eine Sammlung mit den meisten Modulen auf der php.net Download-Seite: "Collection of PECL modules for PHP 5.1.0b1".
Aktuellere finden sich unter snaps.php.net:
http://snaps.php.net/win32/PECL_5_0/
http://snaps.php.net/win32/PECL_UNSTABLE/
- PHP Data Objects (PDO): Vereinheitlichung des DB-Zugriffs in PHP
Für PDO braucht man mind. das PDO-Basispaket, und einen Treiber, z.B. pdo_sqlite oder pdo_mysql.
Gut, bei PDO ist das so eine Sache, ich bin nicht ganz sicher ob das mit dem aktuellen stabilen PEAR-Installer geht (pear install...
), ich glaube schon. Etwas problematisch ist es lediglich, wenn man PDO statisch in das php-binary einkompilieren will. Hierbei hilft dann die Anleitung von Wez für OSX: http://netevil.org/node.php?uuid=420dc046-e4b8-6943-7672-20dc046b0eda
Leider wird wohl die neue HTTP-Extension wohl erstmal nicht in Core aufgenommen, wobei die doch so eine praktiche API für HTTP-Zugriffe hat: http://dev.iworks.at/ext-http/http-functions.html.gz
Grüße
Andreas
Hallo Andreas,
- PHP Data Objects (PDO): Vereinheitlichung des DB-Zugriffs in PHP
Wez Furlong (einer der PHP-Entwickler) schreibt in seinem Blog, das das in der Beta leider buggy ist - in den Snapshots dagegen funktioniert es ordentlich. Siehe auch: < http://netevil.org/node.php?uuid=42aafccd-2812-2642-6775-2aafccd47217>
Insofern: wenn man an PDO interessiert ist, sollte man sich nicht unbedingt die 5.1beta ziehen, sondern einen späteren Snapshot.
Viele Grüße,
Christian
Hallo Christian!
Wez Furlong (einer der PHP-Entwickler) schreibt in seinem Blog, das das in der Beta leider buggy ist - in den Snapshots dagegen funktioniert es ordentlich. Siehe auch: http://netevil.org/node.php?uuid=42aafccd-2812-2642-6775-2aafccd47217
Insofern: wenn man an PDO interessiert ist, sollte man sich nicht unbedingt die 5.1beta ziehen, sondern einen späteren Snapshot.
Ja, das stimmt. Es ist sogar schon eine beta2 getaggt, aber da soll so wie ich das verstanden habe doch noch eben der Date-Kram mit rein, wird aber wohl in den nächsten Tagen kommen. Der große Fehler bei PDO trat AFAIK auf, wenn eine Transaktion vom DB-Server unterbrochen wurde. Ist sicherlich sinnvoller einen Snapshot zu verwenden, aber ich bin überhaupt erstmal froh, dass endlich eine offizielle 5.1-beta raus ist ;-)
Danke für den Hinweis!
Grüße
Andreas