Mailinglisten-Archive |
Hallo ! Zwar bin ich kaum praedestiniert fuer eine solche Nachricht, aber dennoch: Die PHP-Entwicklergruppe hat eine erste Beta-Version von PHP 4.0 veroeffentlicht, siehe auch Mail von Andi Gutmans vom 19.07.1999 in der englischsprachigen Mailingliste. Original-Informationen inkl. Details zur Migration sowie Download via http://www.php.net/version4/ Die Autoren weisen ausdruecklich darauf hin, dass es sich um eine Beta-Version handelt, welche nun in einem breit angelegten, d.h. oeffentlichen Beta-Test von den bislang unentdeckten Bugs befreit werden muss. Dazu bieten sie auch eine spezielle Bug-Database, Adresse siehe o.g. URL. Die Empfehlung geht so weit, diese erste Beta (noch) nicht auf Produktionsservern einzusetzen bzw. sollten die Applikationen zunaechst intensiv getestet werden. Dankenswerterweise :-) hatte ich die Gelegenheit, eine Beta vom letzten Samstag bereits ausprobieren zu koennen, im folgenden ein paar Bemerkungen dazu. - Installation: =============== Meine Standard-Installation bestand aus PHP 4.0b1 mit Apache 1.3.6, wobei PHP als Modul im Apache Platz fand. Experimentell habe ich keine anderen Module eingebunden, dies jedoch nur, um etwaige Interferenzen auszuschliessen. Die parallele Installation des PHP3 und PHP4-Moduls (!) ist nicht moeglich. Jedoch waere es denkbar, z.B. PHP3 als CGI, und PHP4 als Modul einzubinden. Oder natuerlich umgekehrt, beides als CGI etc. . Nach dem obligatorischen ./configure (Parameter uebernommen von PHP3) kompilierte PHP4 klaglos, ebenso funktionierte die Kompilierung des Apache mitsamt des nun libphp4.a getauften Moduls. Zum endgueltigen Start des neuen Kompilats war noch eine Aenderung in der httpd.conf notwendig, nun heisst es AddType application/x-httpd-php .php .php3 .htm AddType application/x-httpd-php-source .phps anstatt application/x-httpd-php3 (!). Zwar sprechen die Migration Notes nur von der Dateiendung .php, aber es erschien mir sinnvoll, auch diejenigen mit der Endung .php3 von der neuen Version parsen zu lassen. Eine weitere Aenderung: php3.ini wurde umgetauft in php.ini . Danach lief der neue Apache mit PHP4 ohne weitere Umstellungen, anhand einer uebersichtlicheren Ausgabe von phpinfo() konnte man sich davon ueberzeugen. - Anwendung / Unterschiede zu PHP3 ================================== Eine genaue Liste der Unterschiede befindet sich auf den Web-Seiten, hier nur ein paar, die mir beim Betrieb vorhandener Skripte aufgefallen sind. - unset() ist keine Funktion (mehr), sondern eine Anweisung. Bzw. war es laut PHP-Gruppe niemals als Funktion dokumentiert, doch zumindest einmal hatte ich es als eine solche verwendet. Anpassung schnell moeglich. - Als Parameter von Konstrukturen sind nur noch skalare Variablen (z.B. Integer, String etc., aber _keine_ Arrays, Objekte o.ae.) erlaubt. Zugegebenermassen eigentlich sinnvoll, aber auch hier hatte ich zumindest eine Anpassung zu taetigen, war ebenfalls schnell erledigt. - Gleiches gilt fuer statische Variablen, habe ich aber selbst nicht getestet. - Bei einer Definition eines assoziativen Arrays ist folgende Zeile nicht mehr moeglich: $arr = array(dingens => "Toast");, statt dessen muss $arr = array("dingens" => "Toast"); geschrieben werden. Achtung: Das basiert auf eigenen Erfahrungen, ist nicht in der Liste der Unterschiede enthalten. Jedoch stieg PHP4 hier bei Verwendung des ersten Konstrukts ohne Fehlermeldung aus. Moeglicherweise ist es ein Bug in PHP4 bzw. Zend, jedoch erscheint mir die zweite Variante von vornherein "sauberer". - Vollstaendig neu (und bislang undokumentiert) sind die Funktionen zum Session-Handling, welche PHP4 nun "ab Werk" bereitstellt. Hier eine minimale Testdatei, aufgeschnappt auf einer Mailingliste: ========== Datei: sestest.php ================= <?php session_register("count"); if($count++ > 0) echo "Welcome back! You have visited this site $count times!"; ?> <P> <A HREF="sestest.php?<?=sid?>">Click here</a> to count up. ================================================ Hier wird mit session_register die Session fuer die Variable "count" eroeffnet, wobei diese Variable mit ihrem Wert persistent gespeichert wird. Die Speicherung geschieht jedoch per default im Verzeichnis /tmp/, weshalb die gesamte Session-Behandlung IMHO (!) datenbank-gestuetzte Loesungen wie - na, Ihr wisst schon - nicht ersetzen kann. Vielleicht irre ich mich in diesem Punkt, wie erwaehnt, die Funktionen sind bislang nicht bzw. nur im Quellcode dokumentiert, moeglicherweise kann ich das darin enthaltene Potential bislang nicht abschaetzen. Immerhin ist diese native Unterstuetzung von Sessions sehr gut fuer das Image von PHP4, so braucht es auch in diesem Bereich den Vergleich mit ASP nicht mehr zu scheuen. Weitere Aenderungen und Ergaenzungen siehe auf den englischsprachigen Web-Seiten, als wichtigste waere wohl die Zend Scripting Engine zu nennen, welche PHP4 als Grundlage dient, damit einher gehen auch neue Features der Sprache, als Beispiel seien das verbesserte Objekt-Handling, oder auch Schleifen mit foreach(), HERE-Docs (wie in Perl) etc. genannt. Die Verwendung von Zend soll auch eine Steigerung der Ausfuehrungsgeschwindigkeit bewirken. Dies liess sich lokal natuerlich schlecht testen, meinem _subjektiven Eindruck_ zufolge ist PHP4 tatsaechlich schneller geworden, die Seiten werden schneller ausgeliefert. Zwar habe ich auch einen kleinen Benchmark-Test durchgefuehrt, welcher den Eindruck bestaetigte, doch moechte ich keine Zahlen veroeffentlichen, da die Test-Umgebung keineswegs optimal war und es sich ausserdem um Beta-Code handelt, bei dem vermutlich noch einiger ueberfluessiger Debug-Code enthalten ist. Bemerkenswert war jedoch, dass beim Benchmark (unter moeglichst gleichen Bedingungen) PHP3 den Rechner weitaus mehr in Anspruch nahm, soll heissen, die Load stieg auf ueber 30, wobei PHP4 es gerade mal auf ca. 5 brachte. - Weniger erfreulich ==================== ...waren und sind die mitunter vorkommenden, tja, wie sollte man es nennen - "Abstuerze", Tod der geforkten Prozesse ?. Soll heissen: Mitunter gibt PHP4 keine Fehlermeldung aus, wenn z.B. ein offensichtlicher Syntaxfehler im Skript enthalten ist, sondern die Seite wird mit 0 Bytes und somit der Meldung "Document contains no data" ausgeliefert. Das heisst auch, dass der Apache selbst sehr wohl am Leben bleibt, sowie dass nach Korrektur der Skripte deren Ausfuehrung wieder problemlos moeglich ist. Im Logfile wird nichts hinterlassen, also auch kein "Segmentation Fault of child process" (oder aehnliche, bereits erlebt...). Hier handelt es sich wohl eindeutig um Probleme der fruehen Beta-Version, evtl. sind diese inzwischen bereits korrigiert. Einige Module sind noch nicht auf dem neuesten Stand, dies soll zur zweiten Beta korrigiert werden. - Fazit ======= Insgesamt ist die Version bereits sehr erfreulich, erst recht, wenn man bedenkt, dass es sich um eine komplette Neuentwicklung der zugrunde liegenden Skript Engine, eben Zend, handelt. Dass in einer fruehen Beta-Version noch Bugs enthalten sind, ist verstaendlich bzw. als normal anzusehen. Die meisten vorhandenen Skripte laufen ohne Aenderungen, manche beduerfen kleinerer Anpassungen. Fuer "Produktionsserver", bzw. Umgebungen, in denen mehrere Leute PHP benutzen, wuerde ich zumindest die naechste Beta abwarten wollen (hallo, infosoc... ;-) ) bzw. PHP4 als CGI oder auf einem anderen Port zur Verfuegung stellen. Bleibt, den Autoren und allen Beteiligten herzlichen Dank fuer diesen sehr grossen Schritt, oder nennen wir es Quantensprung, zu sagen. Beste Gruesse, Ralf -- / ralf_(at)_kuerbis.org -> http://www.kuerbis.org / PHP-Center - alles rund um PHP -> http://www.php-center.de
php::bar PHP Wiki - Listenarchive