PHPGangsta - Der praktische PHP Blog

PHP Blog von PHPGangsta


Applikationen migrieren von PHP 5.6 auf PHP 7.3

without comments

PHP 7.0 ist nun schon über drei Jahre verfügbar, 7.3 ist auch schon wieder 9 Monate alt. PHP 7.4 wird Ende diesen Jahres erscheinen.

In den letzten 2 Jahren habe ich mehrere Projekte von PHP 5.6 auf eine 7er Version bringen dürfen. Zwei davon waren etwas größer, von denen möchte ich hier berichten.

Ich hatte in einem Artikel „PHP 7: Migration eines Projekts„, der kurz vor dem Release von PHP 7.0 erschien, schon einige kleine Tipps gegeben wie man einen Überblick bekommen kann über die zu bearbeitenden Baustellen. Heute soll es etwas mehr ins Eingemachte gehen.

Die 2 Projekte haben jeweils über 100.000 Zeilen „eigenen Code“, also ohne externe Libraries, so dass ich sie als „groß“ bezeichnen möchte. Das eine Projekt wurde zu Zeiten von PHP 5.3 gestartet und entwickelt, hat in den letzten 9 Jahren auch einiges an Pflege und Aktualisierungen erfahren. Externe Bibliotheken wurden ab und zu erneuert, es wurde teils auf Composer umgestellt, und hat auch in den letzten Jahren das ein oder andere PHP 5.4, 5.5 und 5.6 Feature erhalten.
Das andere Projekt ist etwas älter und stammt aus dem Jahr 2009, d.h. PHP 5.2 war damals aktuell, und es wurde noch kompatibel zu PHP 4 erstellt, da noch nicht alle Welt PHP 5 nutzte. Außerdem hat das Projekt seitdem kaum Aktualisierungen bekommen, quasi alles stammt noch aus der damaligen Zeit, ihr werdet später hier im Artikel sehen was ich damit meinen könnte 🙂

PHPStorm „Deprecated“-Inspection

Also gut, zuerst wollte ich mir jeweils einen Überblick verschaffen, und haben diverse Analyse-Tools über die Projekte laufen lassen. Als erstes ließ ich die „Deprecated“-Inspection von PHPStorm laufen. Dazu habe ich die genutzte PHP-Version auf 7.3 gestellt, und danach mittels Code->“Run inspection by name“->“Deprecated“ laufen lassen. Im ersten Projekt waren es nur 14 Einträge, recht übersichtlich und schnell zu beheben.
Im zweiten Projekt jedoch wurden 79 Probleme erkannt. Die häufigsten waren:

Weiterlesen »

Written by Michael Kliewe

September 19th, 2019 at 11:56 pm

PHP 7.3.0 RC 4: Performanceboost und bitte testen!

without comments

Vor 3 Tagen ist der nach Plan drittletzte Release-Candidate von PHP 7.3 erschienen: RC4. Es wird noch einen RC5 und RC6 geben, bevor hoffentlich pünktlich zu Nikolaus am 06.12.2018 das finale PHP 7.3.0 GA erscheinen wird.

Es ist also höchste Zeit, dem PHP-Team dabei zu helfen, Bugs zu finden. Eigentlich sollte man das schon früher getan haben, aber besser spät als nie!

PHP 7.3 bringt erstaunliche Performanceverbesserungen im Bereich des Garbage-Collectors. Früher konnte man einiges an Performance gewinnen, indem man stellenweise den Garbage-Collector deaktiviert. Vor allem wenn mit vielen Objekten gearbeitet wird, hat das Deaktivieren einiges an Performance gebracht (teilweise >70%, siehe DomPDF oder Composer). Mit PHP 7.3 ist das nicht mehr nötig, man bekommt die Performanceverbesserungen frei Haus, man muss den GC nicht mehr deaktivieren. Gratis Performanceboost ohne eine Zeile Code zu ändern!

Selbst kompilieren

Also los, wir kompilieren PHP 7.3.0 RC4 selbst, in diesem Fall auf einem Ubuntu 18.04 Server. Damit es nicht langweilig wird, nehmen wir diverse Extensions mit dazu, ihr nehmt am besten eure, die ihr so braucht für eure Applikationen. Weiterlesen »

Written by Michael Kliewe

Oktober 27th, 2018 at 10:23 pm

TLS 1.0/1.1 Abschaltung: Eigene Versionsverteilung herausfinden und serverseitig abschalten

without comments

Browserhersteller planen, ab 2020 die TLS-Versionen 1.0 und 1.1 nicht mehr zu unterstützen:

https://www.heise.de/security/meldung/Verschluesselung-im-Web-Chrome-Firefox-Co-verabschieden-sich-von-TLS-1-0-1-1-4191864.html
https://www.golem.de/news/https-browser-wollen-alte-tls-versionen-2020-abschalten-1810-137135.html

Mit den richtigen Einstellungen und Ciphers ist TLS 1.0 noch sicher zu betreiben, aber man muss es eben richtig konfigurieren, wenn man alles beachten will: BEAST, POODLE, Sloth, DROWN, CRIME und BREACH, RC4, MD5, ROBOT, Sweet32, Bleichenbacher, Heartbleed, FREAK und Logjam, …

Da es schon ein Dutzend Probleme gab in den letzten Jahren, möchte man sich des Problems lieber früher als später entledigen, gern bevor es zum großen Knall kommt. TLS 1.2 ist nicht gegen all diese Probleme gewappnet, man muss nach wie vor aufpassen wie man die Ciphers konfiguriert. Aber man kann weniger Fehler machen. Und das Ziel ist es, TLS 1.3 zu nutzen, wo all dieses Probleme gelöst sind, da alles unsichere radikal entfernt wurde, und nicht mehr 100 Ciphers zur Auswahl stehen, sondern nur noch eine Handvoll. Weniger Auswahl ist eben manchmal besser.

Ich schrieb 2014 über die Abschaltung von SSLv3, und im Dezember 2017 darüber, dass ab dem 30. Juni 2018 im Kreditkarten-/Payment-Bereich TLS 1.2 als Minimum genutzt werden muss.

Weiterlesen »

Written by Michael Kliewe

Oktober 17th, 2018 at 7:06 pm

Performanceboost durch temporäres Abschalten des PHP Garbage Collectors

without comments

Update 27.10.2018: Mit PHP 7.3 ist das selektive Abschalten des Garbage Collectors wohl nicht mehr nötig.

Auf der Suche nach einfachen Möglichkeiten, die Performance eines CPU-bound PHP-Scripts zu steigern, fiel mir wieder ein, wie der Composer Installer einen drastischen Performanceboost hinbekommen hat. Selbst ausprobiert, und siehe da: Statt 7 Sekunden Laufzeit nur noch 2,7 Sekunden. Whao!

Wie macht man sowas mit nur 1-3 Zeilenänderungen?

Garbage Collection

Ein paar kurze Worte zum Garbage Collector. Am Ende dieses Blogartikels sind ein paar Links für diejenigen, die mehr wissen wollen. Ich versuche es einfach darzustellen.

Der Garbage Collector läuft im Hintergrund eines PHP-Scripts in der PHP-Engine, seine Aufgabe ist es, ungenutzten, nicht mehr gebrauchten Arbeitsspeicher wieder frei zu machen. Dazu durchläuft er alle Variablen und Datenstrukturen, um zu schauen ob sie noch gebraucht werden. Wenn ein Speicherbereich noch gebraucht wird, dann gibt es eine Referenz darauf (eine Variable im einfachsten Fall). Er findet also alle Speicherbereiche, zu denen es keine Variable mehr gibt, und gibt den Speicher wieder frei. Weiterlesen »

Written by Michael Kliewe

Oktober 12th, 2018 at 10:46 am

Der Unterschied zwischen „||“ und „or“ bzw. „&&“ und „and“

without comments

Wenn man eine if-Anweisung in PHP schreiben möchte, und dabei 2 Bedingungen mit einem „und“ verknüpfen möchte, kann man entweder „&&“ nutzen oder „and“ schreiben. Richtig?

if ($a > 0 && $b < 100) {
if ($a > 0 and $b < 100) {

Das ist das selbe, oder? Ja, ist es. Beides funktioniert, beides ist syntaktisch korrekt, und beides ist äquivalent.

Kopieren wir nun die Bedingungen in eine temporäre Variable $c: Weiterlesen »

Written by Michael Kliewe

September 29th, 2018 at 7:33 pm

Posted in PHP

Tagged with ,