Umstellung auf PHP 5.3 / error_reporting

hi,

ich kündige hiermit an, dass ab heute Nacht einige - nicht alle - Server auf PHP 5.3 umstellt werden, im Zuge des Technologiewechsels und des danach nach wenigen Tagen folgenden Upgrades der Server.

Zu beachten gibt es eigentlich nicht vieles, lediglich, dass ab der Umstellung in die .htaccess-Datei keine Werte mehr eingefügt werden können, die mit php_flag oder php_value zu tun haben, für diese wird nun pro Benutzer eine eigene php.ini zur Verfügung stehen.

Die Umstellung erfolgt heute nacht auf 1-2 Servern, nach kurzer Testperiode und dem anstehenden Release eines kompatiblen Zend Optimizers erfolgt die Umstellung auf allen Servern, sowie das Serverupgrade einige Zeit später. Ein Newsletter wird während dieser Phasen versendet, die mehr Informationen diesbezüglich enthalten werden.

ciao

hi,

dieser Thread ist nun hier für Diskussionen offen.

PHP 5.3.0 ist nun offiziell auf einigen Servern im Einsatz.
Sollte jemand wissen wollen, ob dies derzeit der Fall ist, so kann einfach eine php-Datei mit <? phpinfo(); ?> als Inhalt erstellt werden, sobald diese aufgerufen wird, wird auch die PHP-Version angezeigt.
Generell gibt es im Prinzip nicht viel zu beachten, nur 2 Punkte:

  1. wie bereits genannt, php_flag und php_value ist nun nicht mehr in einer .htaccess möglich.
    Hierfür hat nun jeder Benutzer eine eigene php.ini, in die diese Werte geschrieben werden können. Hierzu geht man folgendermaßen vor: die Datei selbst heißt “.php.ini” (den Punkt davor beachten!). Dies hat den Grund, dass die Datei erstmal offiziell als “unsichtbar” für alle gilt, andererseits, dass sie von Seitenbesuchern nicht aufgerufen werden kann.

Dabei reicht es, in dem gewünschten Verzeichnis, für das die Werte gelten sollen, eine solche Datei hochzuladen. Diese also .php.ini benennen und dann einfach die gewünschten Werte in “ini”-Form eintragen, Beispiel:

error_reporting = E_ALL ; das hier ist ein Kommentar, diese fangen mit ; an date.timezone = "Europe/Berlin"

Die Datei kann aus Kompatibilitätsgründen auch nach “.user.ini” benannt werden - dies ist generell der Standardname, da er jedoch meist nicht wirklich aussagend ist, heißt es hier bei bplaced exklusiv “.php.ini”. Sollten sich 2 solche Dateien in einem Verzeichnis befinden (.user.ini und .php.ini), so hat die .php.ini die dominante Stellung. Es wird also zuerst .user.ini geparst und dann .php.ini - wobei das, was in .php.ini steht, Werte in .user.ini überschreiben kann.

Wer solche Werte wie php_value oder php_flag schon mal in einer .htaccess hatte, muss jedoch nichts machen - diese wurden automatisch in eine .php.ini übertragen und aus der .htaccess auskommentiert.

2.,
in 5.3 sind einige Methoden offiziell als “veraltet”, daher im Englischen als deprecated bestimmt. Dies hat damit zu tun, dass solche betroffenen Anweisungen generell einfach als veraltet gelten und nicht mehr benutzt werden sollten. Leider ist dies auch bei aktueller Software teilweise noch der Fall.
Generell ist das sog. Error-Reporting, das dafür sorgt, dass solche Meldungen ausgegeben werden, aktuell auf

…gesetzt. Dies bedeutet in Worten: Alle Fehler anzeigen, außer “Notice”-Fehler. Notice steht hierbei für “Notiz”, daher sind dies keine richtigen Fehler, sondern eher Hinweise, dass man hier etwas besser machen könnte oder dass womöglich ein Problem auftreten könnte.

[size=150]Meine Seite zeigt aber nun trotzdem Fehler, die vorher noch nicht da waren, warum ist das so?[/size]

Mit PHP 5.3 hat sich hierbei einiges geändert. So haben einige Funktionen nun mehr Parameter oder weniger, oder wünschen als Parameter zB. nur noch Strings statt wie bisher auch beispielsweise Objekte.

Das kann daher nun dazu führen, dass ab 5.3 auf einmal manchmal Fehler auf der Seite zu sehen sind, die vorher noch nicht da waren. Nun ist es so, dass PHP auch u.A. die sog. E_DEPRECATED-Fehler ausgibt, die dann auftreten, wenn eine veraltete Anweisung ausgeführt wird.

Bei bplaced hat die Standardeinstellung bzw. E_ALL nun generell nicht die E_DEPRECATED-Fehler inklusive, diese werden hierbei ausgenommen. Um diese Fehler trotzdem anzugeigen, bestehen nun folgende Möglichkeiten:

- entweder, man sucht im Quelltext nach der error_reporting()-Funktion, diese könnte Beispielsweise
error_reporting(E_ALL & ~E_NOTICE); lauten - dies müsste dann dadurch ausgetauscht werden,
dass | E_DEPRECATED angehängt wird, also müsste die Funktion dann lauten:

- auch kann man ab nun in der php.ini den Wert error_reporting = E_ALL & ~E_NOTICE | E_DEPRECATED;

… eintragen, was das gleiche für alle Unterverzeichnisse bedeutet, in dem die .php.ini dann abgespeichert wird.
Neben | E_DEPRECATED kann auch | E_USER_DEPRECATED angehängt werden, um das error_level zusätzlich um eine Stufe zu erhöhen.

Sollten nun Fehler auftauchen, die durch die Änderung von PHP 5.2 auf 5.3 dazu kamen - wie eben das angesprochene Beispiel mit den zusätzlichen Parametern oder anderen erwarteten Parametern (Strings statt Objekten, beispielsweise), so kann man dies entweder “beheben” - daher im Sinne von PHP richtigstellen, oder

- man könnte auch z.B. wenn die Zeile bekannt ist, die den Fehler auslöst, ein @ davor setzen. Dies bewirkt, dass auftretende Fehler unterdrückt werden, Beispiel:

trim($object);

abändern in

@trim($object);

Weitere Informationen bzw. Funktionen, die Änderungen erfahren haben oder ab nun als veraltet bezeichnet werden sind hier genannt: de.php.net/manual/en/migration53.deprecated.php

Sollten weitere oder andere Probleme auftreten, dann bitte hier bescheid sagen. Derzeit werden nicht alle Server umgerüstet (andere verbleiben noch auf PHP 5.2.8 ), da Zend noch nicht den Zend Optimizer nachgeliefert hat, der für PHP 5.3 passend ist. Da dieser von vielen Benutzern genutzt wird, würden diese Scripte von solchen Benutzern nicht mehr funktionieren. Einige, die ich ausmachen konnte wurden entsprechend automatisch auf einen anderen Server verschoben, der noch bei 5.2.8 bleibt. Sobald hier eine passende Version von Zend erhältlich ist, werden alle Server entsprechend migriert. Sollte noch jemand derzeit den Zend Optimizer auf einem betroffenen Server benutzen, so kann hier beantragt werden, dass ein Umzug auf einen anderen Server stattfindet - eventuell konnte ich nämlich nicht alle solchen Scripte ausmachen.

Beachtet bitte, dass diese Änderungen früher oder Später sowieso nötig geworden wären, bzw. eigentlich überfällig sind. Diese Umstellung ist wichtig für alle, die in Zukunft auch PHP 6 verwenden werden, da dort viele dieser “veralteten” Features auch gar nicht mehr existieren werden, da sie offiziell abgeschafft werden, was bedeuten würde, dass eure Scripte daher nicht mehr richtig funktionieren würden - hier wird man derzeit noch gewarnt, anstatt die Funktionalität zu entfernen.

ciao

hi,

Punkt 2 wurde nun entsprechend abgeändert um den aktuellen Ereignissen zu entsprechen.

ciao

hi,

Server2 wurde hiermit auch auf PHP 5.3 umgestellt. Automatisierte Modifikationen für Mediawiki, Joomla 1.0 und Joomla 1.5 sowie WBB (bezüglich Eventhandler.class.php) laufen gerade durch, sollten bis etwa 09:00 am 09.07.2009 abgeschlossen sein.

Server 2 und Server 3 werden ab dem 10.07 durch neue Systeme ausgetauscht - soll heißen: die neuen Server sind da. Mit der Umstellung auf 5.3 werden anschließend wahrscheinlich Server 7 und 5 folgen, mal sehen, erstmal den Umzug. Der Umzug wird etwa ab morgen anfangen, die ganze Nacht dauernd und sich womöglich über 2 Nächte erstrecken, da die Datenmenge einfach viel zu groß ist, um sie in einer Nacht umziehen zu können. Mehr Infos dazu wird es später geben.

ciao

hi,

die Änderungen bzw. die Modifikationen der betroffenen Dateien sind nun abgeschlossen.
Sollte jemand eine entsprechend genannte Software nachträglich installieren, so kann derjenige anfragen, dass die Modifikationen für das eigene Konto erneut wiederholt durchlaufen werden - WBB wird dies wohl in der nächsten Version korrigieren, Joomla eventuell noch nicht. Weitere Infos zu Joomla gibt es hier: viewtopic.php?f=6&t=10341&start=0

ciao