Heim  >  Artikel  >  Backend-Entwicklung  >  Zwei große Fallstricke, die durch das Upgrade von PHP 7.4 verursacht werden

Zwei große Fallstricke, die durch das Upgrade von PHP 7.4 verursacht werden

藏色散人
藏色散人nach vorne
2020-02-08 13:07:145471Durchsuche

Da mein Computer das fortlaufende Update von Archlinux verwendet, wurde PHP unwissentlich auf 7.4 aktualisiert, was zu großen Problemen führte. Zuerst verursacht die neue Option ProtectHome von PHP-fpm den klassischen Fehler „Datei nicht gefunden“, und dann meldet der PHP-Interpreter direkt einen Fehler beim Versuch, auf den Array-Offset für einen Wert vom Typ Null für den Indexzugriff vom Typ Null zuzugreifen.

Kürzlich habe ich einem Freund beim Aufbau einer Website geholfen, also habe ich den Online-Code zum Testen zurück auf den lokalen Spiegel gezogen. Da die Webanwendung einige seltsame Abhängigkeiten aufweist, habe ich sie zum Testen in Docker bereitgestellt, um die lokale Umgebung nicht zu verschmutzen. Als Grundbild von Docker wählt man das radikale Archlinux, gepaart mit PHP7.4, das Ende letzten Monats veröffentlicht wurde. Also verbrachte ich einen ganzen Nachmittag damit, in der Debug-Grube festzustecken...

Nachdem ich die Umgebung mit einem Shuttle eingerichtet hatte, ließ ich sie zunächst laufen und meldete einen der klassischsten und nervigsten Fehler in PHP- fpm: Datei nicht gefunden. Jeder, der PHP-FPM konfiguriert hat, weiß, dass dieser Fehler normalerweise durch falsche Dateiberechtigungen oder falsche Dateipfade verursacht wird und beide Fehler relativ schwer zu finden sind. So habe ich die Wegbesichtigung noch einmal mit großen und kleinen Augen erlebt und es gab kein Problem. Dateiberechtigungsprüfung, emmm, gibt es kein Problem? Ich ging zurück und überprüfte den Pfad, und er war immer noch in Ordnung! Ich war so frustriert, dass chmod 777 das Problem nicht lösen konnte...

Ich habe online nach dem Fehler „Datei nicht gefunden“ gesucht. Es gab nur diese beiden Gründe. Und diese beiden Gründe wurden einer nach dem anderen beseitigt und die Dinge entwickelten sich plötzlich aus einem magischen Blickwinkel...

Ich weiß nicht, wie lange es gedauert hat, bis ich dachte, dass es möglicherweise mit der PHP-Version zusammenhängt (weil Auf meinem nativen Rechner habe ich auch andere PHP-Anwendungen ausgeführt, daher dachte ich zunächst nicht, dass es ein Problem mit PHP geben würde. Also habe ich nach den Änderungen in der neuen Version von PHP7.4 und PHP-fpm7.4 gesucht und sofort den Übeltäter gefunden:

Php7.4 Commit

(https:/ / github.com/php/php-src/commit/40c4d7f1820df1872a71ab07fd26da45a203e37f#diff-c0605c0e7e1db864472acf66a9812d33R22)

Diesem Commit wurde eine Option hinzugefügt: Protect Home. Wie der Name schon sagt, führt PHP bei Aktivierung keine Dateien im Home-Verzeichnis aus – und der Standardwert dieser neuen Option ist zufällig aktiviert. Verwenden Sie systemctl edit php-fpm.service, um eine Optionsüberschreibung hinzuzufügen. Nach dem Neustart des Dienstes ist endlich alles normal und ein zweiter großer Fehler tritt auf:

Include, require usw. werden in PHP häufig zum Einschließen verwendet andere Dateien. Beim Debuggen wurde festgestellt, dass PHP nach einem bestimmten Include die Ausführung direkt stoppte und einen Fehler beim Versuch, auf den Array-Offset für einen Wert vom Typ Null zuzugreifen, meldete. Aber der Online-Code lief ohne Probleme, was sehr seltsam war. Nachdem ich der Include-Datei gefolgt war, stellte ich fest, dass es eine Stelle gab, an der auf die Array-Elemente zugegriffen wurde, das Array selbst jedoch null war. Diese Syntax wird im Allgemeinen in schwach typisierten Sprachen wie PHP unterstützt und gibt insgesamt null zurück. In der neuen Version von PHP7.4 wird diese Syntax jedoch als Fehler gemeldet. Es scheint, dass PHP auch die Eigenschaften der Sprache ein wenig standardisiert. Es gibt keine Möglichkeit, ich kann den Code nur selbst ändern. (Obwohl ich mich derzeit dafür entscheide, die alte Version von PHP zu verwenden)

Da PHP7.4 vor nicht allzu langer Zeit veröffentlicht wurde, wird geschätzt, dass es nicht umfassend aktualisiert und verwendet wurde, und die Entwickler verschiedener Anwendungen möglicherweise nicht habe PHP7.4 und kompatible Modifikationen getestet. Genau aus diesem Grund konnte ich bei der Suche nach diesen Informationen im Internet keine wertvollen Vorschläge finden. Neben der Aufzeichnung des ganzen Nachmittags, in dem ich mich von dieser neuen Funktion täuschen ließ, liefert dieser Artikel auch anderen Menschen eine Idee zur Lösung ähnliche Probleme.

Das obige ist der detaillierte Inhalt vonZwei große Fallstricke, die durch das Upgrade von PHP 7.4 verursacht werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:sbw.so. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen