Navigation überspringen

WordPress & PHP 8: ABSPATH-Warning und »cannot decode raw data«-Error beheben

28.11.2022·Kommentare:  4Retweets:  0 1

Lang, lang hab ichs hinausgeschoben, das Upgrade auf PHP 8 bzw. PHP 8.1. Beim ersten schnellen Versuch vor ein paar Monaten ging nämlich gar nichts mehr: Einerseits erschien – wenn überhaupt – für ABSPATH ein »Already defined«-Warning, meistens lud der Browser aber die Seite erst gar nicht und lieferte einen »cannot decode raw data«-Error. So behebt ihr das Problem.

Screenshot der Fehlermeldung »cannot decode raw data (NSURLErrorDomain:1015)« in Safari (macOS).
Nach der Umstellung auf PHP 8 geht zunächst nichts mehr.

Letzteres sollte ich vielleicht präzisieren: Rief ich meine Seiten mit einem Parameter hinter dem Trailing-Slash auf, also z.B. mit /?blabla, wurde die Seite gerendert – mit besagtem ABSPATH-Warning:

Warning: Constant ABSPATH already defined in wp-config.php […]

Die Warnung gab es auch schon in PHP 7.4, konnte man aber mittels error_reporting(0); ohne weitere Konsequenzen ausblenden (ich weiß, keine schöne Lösung).

Cannot decode raw data + NSURLErrorDomain 1015

Die Warnung wäre mir auch noch egal gewesen, dass Seiten beim direkten Aufruf aber gar nicht mehr angezeigt werden und Safari eine graue Seite mit »›cannot decode raw data‹ NSURLErrorDomain:-1015« wirft (siehe Screenshot oben) war ein No-go und so schob ich das Problem erst einmal auf die lange Bank.

Da der Support für PHP 7.4 aber offiziell mit Ende November 2022 ausläuft, wollte ich die Sache noch einmal angehen. Und siehe da, die beiden Probleme hängen zusammen!

Man findet nämlich zwar einige Support-Threads zu beiden Problemen, unter anderem:

All das war bei mir aber nicht der Fall.

Den entscheidenden Hinweis fand ich in einem Thread, der von Encoding-Problemen ausgeht. Daran lag es in meinem Fall zwar wie gesagt nicht, aber User bscu schreibt bzgl. der wp-config.php:

Da sollte eigentlich u.a. sowas drin stehen:

/** Absolute path to the WordPress directory. */
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');

Da klingelte es bei mir. Die letzten Zeilen der wp-config.php sahen bei mir nämlich seit Jahren so aus:

define('ABSPATH', dirname(__FILE__).'/');
require_once(ABSPATH.'wp-settings.php');

Sprich, vor der Definition von ABSPATH wurde nicht geprüft, ob die Konstante schon definiert wurde. Also dachte ich, bevor ich mich um das schwerwiegendere »Cannot decode raw data«-Problem kümmere, behebe ich zuerst das leidige Warning.

Stattdessen sollte also korrekt folgender Code stehen:

/* That's all, stop editing! Happy blogging. */
if ( ! defined( 'ABSPATH' ) ) {
define( 'ABSPATH', dirname( __FILE__ ) . '/' );
}
/** Sets up WordPress vars and included files. */
require_once( ABSPATH . 'wp-settings.php' );
?>

Und siehe da, der Fehler mit »Cannot decode raw data« verschwand dadurch auch!

Ich vermute, dass die Ausgabe der Fehlermeldung durch PHP 8 (im Gegensatz zu PHP 7) irgendwas beim HTML-Rendering durcheinander bringt und so der Fehler entsteht. Warum das nicht der Fall ist, sobald man irgendeinen Parameter an die URL hängt … keine Ahnung. 🤷‍♂️

WordPress’ Aktualisierungsproblem

Das ist leider ein grundsätzliches Problem von WordPress, das mich – wenn ich mich richtig erinnere – auch früher schon einmal betroffen hat: Die automatische Aktualisierung updated zwar brav alle WordPress-Dateien, lässt die wp-config.php aber unverändert.

Ändert sich da drin aber einmal was Grundlegendes, so wie zum Beispiel, dass ABSPATH bereits vor Aufruf der wp-config.php definiert werden kann (evtl. durch Plugins?), funktioniert die ganze WordPress-Installation nicht mehr.

Da die wp-config.php die eigenen Credentials enthält, ist ein Update durch WordPress zwar nicht immer leicht möglich. Bei grundsätzlichen Änderungen einen Hinweis im WP-Admin-Interface zu liefern, sollte aber drin sein.

Tipp: Immer mit wp-config-sample.php vergleichen

Daher wichtig: Nach jedem WordPress-Update prüfen, ob in der wp-config-sample.php neuer Code dazugekommen ist, den ihr bei eurer produktiven wp-config.php nachziehen müsst!


Neueste Artikel

Schlagwörter

· · · · · · ·


Teilen & Favorisieren

Twitter (0 & 0) · Mastodon (0 & 0) · Facebook (0 & 1)

4 Kommentare

Hier (4) · Twitter (0) · Mastodon (0) · Facebook (0)

#1 von Rolf am 4.2.2023, 14:37 Uhr

Vielen Dank, das war auch mein Problem und hat mir sehr geholfen.

#2 von Benedikt am 4.2.2023, 19:24 Uhr

Hi Rolf, danke für dein Feedback und freut mich wenn, wenn es mit meinem Tipp bei dir geklappt hat – dachte mir schon, dass ich da unmöglich der Einzige mit dem Problem sein kann. 😀

#3 von Gunter am 11.3.2023, 9:26 Uhr

Hallo, ich habe 6 Webseiten bei Strato. Zwei ließen sich von 7.4 auf PHP8.0 ohne Probleme umstellen. Bei den anderen vier Stück klappt es nicht. Habe bei Strato derweilen den Service gebucht das 7.4 noch unterstützt wird. Ich habe jetzt viel im Internet recherchiert und auch hier viel gelesen um selbst die Sache hinzukriegen. Habe mit der wp-config.php rumgespielt und verschiedenes ausgetestet, muss jetzt aber aufgeben. Bei einer Webseite gelang mir die Umstellung auf 8.0 aber dafür ging mein Slider nicht mehr. Bei einer anderen Seite ging die Umstellung auch, aber dafür war alles nach einem Klick in Kleinformat wie in ipad Größe. Nun ja ich bin Laie und habe wenig Ahnung (kann mit FTP Programm umgehen und was einfügen oder ausbessern, verstehe aber nix von Codes usw.)Ich habe mir diese WP Seiten vor Jahren aufgebaut und eigentlich keine Zeit mehr dafür. Ich wollte sie aber noch eine Weile behalten, habe jetzt aber auch keine Lust jeden Monat für vier Seiten bei Strato Geld für den 7.4 Service zu bezahlen. Vielleicht können sie mir helfen oder wissen jemanden der meine Seiten checken und auf 8.0 umstellen kann. Bin auch bereit was dafür zu bezahlen. Danke

#4 von Benedikt am 13.3.2023, 13:51 Uhr

Hi Gunter, sorry für die verspätete Antwort. Klingt jedenfalls mühsam. Prinzipiell hilft mein Tipp hier nur gegen das Problem mit der wp-config.php beim Umstieg auf PHP 8. Die Fehler, die du beschreibst, scheinen zwar dieselbe Ursache (PHP 8) zu haben, aber andere Gründe (z.B. Plugin mit Slider ist nicht mit PHP 8 kompatibel, Theme kommt mit PHP 8 nicht klar und Breakpoints funktionieren nicht mehr etc.)

Abseits des Tipps, alle Plugins zu aktualisieren oder schrittweise zu deaktivieren, um das Problem einzugrenzen, ist eine Ferndiagnose jedenfalls schwierig.

Du könntest dich mal in deinem Umfeld umhören, ob sich das ein Freelancer ansehen kann, das ist vermutlich am zielführendsten.

Kommentieren

Am liebsten hier, gerne aber auch auf Twitter, Mastodon und Facebook. Ich freue mich über jeden Kommentar (Guidelines) & antworte immer (meist < 24h), HTML erlaubt.