Im November letzten Jahres pHP 8 ist gelandet. Ich habe einige Verbesserungen bei Leistung, Geschwindigkeit und Sicherheit angekündigt.
Wie jeder gute Tüftler habe ich ein Upgrade von 7.4 durchgeführt, genauer gesagt von 7.4.16, der Version, die jetzt auf dem Server läuft.
plof! Ein netter 500-Fehler begrüßt mich und macht die ganze Website kaputt. Keine URL wird aufgelöst.
Ich habe die typischer Test um alle Plugins zu deaktivieren und die Standardvorlage zu verwenden. Der Fehler 500 wollte nicht verschwinden.
Ich war schockiert, aber ich habe die Angelegenheit in der Überzeugung weitergegeben, dass es für ein Update noch zu früh sei und dass es am besten sei, zu warten, bis alle Plugin- und Template-Autoren ihren Code aktualisieren, um ihn mit PHP 8 kompatibel zu machen, wie sie mir rieten
Fast sieben Monate später versuchte ich es erneut, und der 500-Fehler war immer noch da.
Der erste Hinweis darauf, dass der Fehler nur in diesem Blog auftritt, ist, dass bei den beiden anderen WordPress-Installationen, die ich auf demselben Server habe, alles korrekt funktioniert.
Ein 500-Fehler kann aus einer Vielzahl von Gründen auftreten. Der nächste logische Schritt besteht darin, die Fehlerprotokolle aufzurufen, um herauszufinden, was los ist. Es erscheint eine Reihe von Warnungen wie diese:
PHP Warnung: Verwendung einer undefinierten Konstante minor - angenommen 'minor' (dies wird in einer zukünftigen Version von PHP einen Fehler auslösen) in /home/xxxxxx/public_html/blog/wp-config.php auf Zeile 11
PHP Warnung: Verwendung der undefinierten Konstante minor - angenommen 'minor' (dies wird in einer zukünftigen Version von PHP einen Fehler auslösen).
Das heißt, die Konstante sollte in Anführungszeichen gesetzt werden. Ich gehe zur wp-config.php und tatsächlich erscheint minor ohne Anführungszeichen in dieser Zeile
define ('WP_AUTO_UPDATE_CORE', minor);
Bei der Suche im WordPress-Forum habe ich festgestellt, dass viele Leute das gleiche Problem beim Upgrade auf ältere PHP-Versionen hatten, weil es Konflikte mit einem Plugin oder einer Vorlage gab.
Es kann auch nicht ausgeschlossen werden, dass das Problem mit der Installation von WordPress zusammenhängt, dass ich etwas kaputt habe, wie mir in einem Ticket mitgeteilt wurde, das ich an LucusHost.
In einigen der Antworten, die sie erhalten, heißt es, dass man das Problem lösen kann, indem man die Anführungszeichen zu 'minor' hinzufügt, also probieren Sie es aus und das habe ich getan
define ('WP_AUTO_UPDATE_CORE', 'minor');
WP_AUTO_UPDATE_CORE ermöglicht es Ihnen, WordPress-Kern-Updates für Minor-, Major- und Entwicklungsversionen zu steuern. Diese Konstante kann auf verschiedene Weise definiert werden. Es ist keine gute Idee, diese Zeile zu entfernen.
#Deaktiviert alle Kern-Updates:
define( 'WP_AUTO_UPDATE_CORE', false );
# Aktivieren Sie alle Updates, einschließlich kleinerer und größerer Updates:
define( 'WP_AUTO_UPDATE_CORE', true );
# Ermöglicht kleinere Aktualisierungen:
define( 'WP_AUTO_UPDATE_CORE', 'minor' );
Eine gute und eine schlechte Nachricht.
Die gute Nachricht ist, dass jetzt, wo PHP 8 läuft, der 500-Fehler verschwunden ist.
Auf den ersten Blick scheint alles gut zu funktionieren, sowohl Plugins als auch Beiträge.
Die schlechte Nachricht ist, dass der Index kaputt ist und wie folgt aussieht.
Ich beschloss, zuerst die post-Vorlagelinie, hergestellt mit Elementor Profür den Fall, dass der Erbauer irgendeinen versteckten Müll hinterlassen hatte, aber nachdem ich es durchgegangen bin und es komplett neu gemacht habe, habe ich ausgeschlossen, dass der Fehler von dort kam.
Jetzt bin ich noch dabei, die Vorlage zu bereinigen (GeneratePress Premium) in einer Testumgebung und ich weiß zumindest, wo es bricht, aber meistens suche ich in WordPress, wo ich denke, dass der Kern der Sache liegt, ein veralteter Code, der hineingeschleppt wurde, ein mit Fett verstopfter Filter oder was auch immer.
Ich hinterlasse diese Notiz hier für den Fall, dass jemand ein ähnliches Problem hatte und es für ihn oder sie nützlich ist, oder wenn er oder sie sich gut mit WP auskennt und weitere Hinweise zur Lösung des Problems geben kann.
Sobald ich die endgültige Lösung und eine mögliche Erklärung gefunden habe, werde ich diesen Beitrag aktualisieren.
Update
Das Fehlerprotokoll, nachdem ich DEBUG aktiviert habe, gibt Hinweise darauf, dass GeneratePress irgendwo abstürzt, vielleicht wegen eines Hooks oder Filters, den ich in das Elements-Modul (oder was auch immer) eingebaut habe
Da ich ein Child-Template von GeneratePress habe, bin ich verloren und weiß nicht, wie es weitergehen soll, aber da ich ein paar Vermutungen habe, betrachte ich die Mission nicht als gescheitert.
Schwerwiegender Fehler: Uncaught TypeError: Nicht unterstützte Operandentypen: string + int in /home/ public_html/blog/wp-content/themes/generatepress/inc/structure/post-meta.php:169 Stack trace: #0
/home/ public_html/blog/wp-content/themes/generatepress/inc/structure/post-meta.php(419): generate_do_post_meta_item() #1
/home/ public_html/blog/wp-content/themes/generatepress/inc/structure/post-meta.php(538): generate_posted_on() #2
/home/ public_html/blog/wp-includes/class-wp-hook.php(292): generate_post_meta() #3
/home/ public_html/blog/wp-includes/class-wp-hook.php(316): WP_Hook->apply_filters() #4
/blog/wp-includes/plugin.php(484): WP_Hook->do_action() #5
/blog/wp-content/themes/generatepress/content.php(48): do_action() #6
/blog/wp-includes/template.php(732): require('/home/ ...') #7
/blog/wp-includes/template.php(676): load_template() #8
/blog/wp-includes/general-template.php(204): locate_template() #9
/blog/wp-content/themes/generatepress/inc/theme-functions.php(587): get_template_part() #10
/blog/wp-content/themes/generatepress/index.php(37): generate_do_template_part() #11
/blog/wp-includes/template-loader.php(106): include('/home/ ...') #12
/blog/wp-blog-header.php(19): require_once('/home/ ...') #13
/blog/index.php(17): require('/home/ ...') #14
{main} thrown in /blog/wp-content/themes/generatepress/inc/structure/post-meta.php auf Zeile 169
repariert! Nun, fast
Zum Glück war die erste Zeile der Schlüssel, denn dort wurden alle Fehler in dieser langen Liste ausgelöst:
Schwerwiegender Fehler: Uncaught TypeError: Nicht unterstützte Operandentypen: string + int in /home/ public_html/blog/wp-content/themes/generatepress/inc/structure/post-meta.php:169
Das Geheimnis des Fehlers lag in einer nicht unterstützten Operation des verdammten get_the_time
Damit bestätigt sich der Verdacht. Der Fehler wurde durch dieses Funktions-Snippet verursacht, das ich verwendet habe, um den Tag und die Uhrzeit der Aktualisierung als Erweiterung der Datums-Meta anzuzeigen.
Und zu allem Überfluss, ich weiß nicht wie, aber es blieb nach der Deaktivierung erhalten Code-Schnipsel und löschen Sie den Cache.
Die Moral von der Geschichte: Verwenden Sie keine Funktionen, die bei anderen gut funktionieren, denn jede Seite hat ihre eigene Geschichte und es ist sehr wahrscheinlich, dass sie am Ende etwas kaputt machen, wenn Sie sie vergessen, WP, PHP, eine Vorlage oder ein Plugin aktualisieren und sie nicht mehr kompatibel sind.
Wenn Sie dieses Snippet löschen, funktioniert alles einwandfrei und die Homepage ist wieder normal.
Keine zwei ohne drei, ein weiterer Fehler. Jetzt Feedzy
Aber gehen Sie noch nicht weg, denn jetzt ist das Plugin Feedzy (nehme ich an) oder irgendetwas, das damit zusammenhängt, unterbricht die Nachrichtenseite.
Da es sich um eine kostenpflichtige Version handelt, muss ich ein Support-Ticket eröffnen, um die Plugin-Entwickler wissen zu lassen, ob das Plugin zu 100% mit PHP 8 kompatibel ist (und wenn es nicht funktioniert, weil es nicht kompatibel ist) oder um einen Hinweis zu erhalten.
07.02.2021 - Feedly hat den fatalen Fehler unter Verwendung von PHP 8 repliziert und das Problem an seine Entwickler weitergeleitet. Jetzt müssen wir darauf warten, dass sie eine neue Version des Plugins veröffentlichen, die das Problem behebt.
07.05.2021-Die Beschreibung des Fehlers finden Sie hier sie finden sie in ihrem Github.
07.06.2021 - Obwohl sie noch nicht geantwortet oder eine neue Version mit der Korrektur veröffentlicht haben, sind sie in diesem Commit bereits die Codezeilen, die das Problem beheben. Ich habe es getestet und in Ermangelung eines guten und gründlichen Tests scheint es, dass PHP 8 nichts mehr kaputt macht.
Zur Wiederholung
Nicht schlecht. Von einem 500-Fehler, der den gesamten Blog lahmlegte, bis hin zu einem Fehler, der nur auf der Startseite und schließlich auf einer einzigen"sekundären" Seite auftrat und schließlich behoben werden konnte, ist es genug, um mit den in die Reparatur investierten Stunden zufrieden zu sein.
Der Schlüssel zu allem liegt in der Recherche. Verbringen Sie Ihre Zeit damit, nach dem Ursprung zu suchen und danach, was er in anderen Bereichen Ihres Blogs verursacht. Stürzen Sie sich nicht ohne genügend Anhaltspunkte in den Versuch, schnelle Lösungen zu finden, denn damit verschwenden Sie entweder Ihre Zeit oder machen im schlimmsten Fall etwas anderes kaputt.
Ich aktualisiere wieder, wenn ich es schaffe, den neuen Bug mit Feedzy oder was auch immer es dieses Mal ist, zu besiegen.