Was tun bei HTTP 500: Interner Serverfehler?

Wie ich eine Webseite mit einem HTTP 500'er Fehler wieder zum laufen bekommen habe.

    Inhaltsangabe
  1. Herantasten
  2. Fehler gefunden
  3. Was sagt uns das?
  4. Die Lösung
  5. Fazit

Ich hatte vor einigen Tagen den Fall, dass ein Freund sich bei mir gemeldet hat und mir von seiner Webseite erzählt hat, die nicht mehr funktioniert. Ich habe mir die Webseite angeschaut und gesehen, dass es sich um einen 500’er Fehler handelt.

Ein HTTP 500’er Fehler bedeutet in etwa, dass der Server ohne eine Aussage machen zu können in Ohnmacht gefallen ist. Deswegen müssen wir uns langsam herantasten und den Code (den wir nicht selber geschrieben haben) analysieren.

Der HTTP 500 Internal Server Error Statuscode zeigt an, dass der Server durch einen unerwarteten Umstand daran gehindert wurde die an ihn gesendete Anfrage zu erfüllen.

MDN web docs – 500 Internal Server Error

Herantasten

Damit ich mich langsam herantasten konnte, musste ich erst einmal den ganzen Code auskommentieren. Das bedeutet, dass am Anfang nichts ausgeführt wird.

PHP unterstützt ‚C‘, ‚C++‘ und Unix-Shell-artige (Perl-artige) Kommentare.

php.net manual Kommentare

Anschließend werden nach und nach immer mehr Codezeilen freigegeben und jedes mal geschaut, ob die Seite wieder abgestürzt ist oder weiter läuft. Wenn die Seite wieder abstürzt, kann man die Suche immer weiter verfeinern.

In diesem Fall musste ich in drei Dateien die selbe Technik anwenden, da diese durch require hereingeladen wurden.

require entspricht im Wesentlichen include, wirft aber im Fehlerfall einen E_COMPILE_ERROR Fehler. Es beendet also die Programmausführung während include nur eine Warnung (E_WARNING) generiert und so die weitere Programmausführung gestattet.

php.net manual – require

Fehler gefunden

Ich habe mit diesem Verfahren immer weiter gemacht, bis ich die erste Zeile Code gefunden habe, die den 500’er Fehler verursacht:

 mysql_connect(DB_HOST, DB_USER, DB_PASS) or die('Connection to database failed: '.mysql_error());

Auf dem ersten Blick sieht alles gut aus, jedoch als ich mir die php.net Dokumentation angeschaut habe, wurde mir einiges klarer. Du darfst nirmals so überheblich sein und denken, dass du die php.net Dokumentation nicht brauchst. Es werden dort immer wieder Neuigkeiten zu unterschiedlichen Erweiterungen und Funktionen angezeigt. In diesem Fall zum Beispiel:

Warnung
Diese Erweiterung ist seit PHP 5.5.0 als veraltet markiert und wurde in PHP 7.0.0 entfernt. Verwenden Sie stattdessen die Erweiterungen MySQLi oder PDO_MySQL.

php.net manual mysql_connect

Was sagt uns das?

Viele Hoster stellen aufgrund der Sicherheit ihre Server von php-5 auf php-7 um. In letzter Zeit habe ich mindestens 20 Webseiten gehabt, deren Anbieter auf php-7 umgestellt haben. Von meinem eigenen Hoster habe ich in regelmäßigen Abständen mindestens 10 E-Mails erhalten, welche mich vor der Umstellung gewarnt haben und mich gebeten haben, meine Webseite entsprechend vorzubereiten.

Worauf ich hinaus will ist, dass hier die Warnungen ignoriert wurden. Hier wird deutlich, dass die Kontaktperson des Anbieters anscheinend diese Mails ignoriert hat und nun mit einem Server-Fehler konfrontiert ist.

Die Lösung

Ich musste am Ende einfach nur den Code auf den letzten Stand bringen und dafür sorgen, dass die Webseite mit einem php7 Server funktioniert. Dafür mussten lediglich an 50 Stellen die MySQL Abfragen aktualisiert werden.

Fazit

Falls bei euch auch vorkommt, dass eine Webseite so einen Fehler anzeigt, könnt ihr nichts anderes tun als euch langsam rann zu tasten und die möglichen Fehlerquellen zu beseitigen.

On solchen Fällen nützt es nichts, wenn ihr versucht das Problem auf die schnelle zu lösen, weil die Wahrscheinlichkeit, offensichtliche Fehler zu übersehen viel zu hoch ist.

Themen

Erfahrung php Programmieren Technik Tipps

Beitrag teilen

WhatsAppen

Folgen Sie uns