Bahnhofstraße 22, 52134 Herzogenrath Montag - Freitag: 8:00 - 16:30 kontakt@milnersoftware.de 0176 66798849

Aktuelles · Tipps · · 6 Min. Lesezeit

„500 Internal Server Error“ bei PHP-Websites: Ursachen finden und beheben

Ihre PHP-Website zeigt nur noch „500 Internal Server Error“? So lesen Sie das Fehlerprotokoll auf Shared Hosting und prüfen .htaccess, PHP-Version, Dateirechte und Fatal Errors.

Laptop mit Programmcode auf einem hellen Schreibtisch

Kurz gesagt: „500 Internal Server Error“ ist eine Sammelmeldung. Der Server sagt damit nur: „Hier ist etwas schiefgegangen.“ Bei PHP-Websites stecken fast immer vier Ursachen dahinter: eine fehlerhafte .htaccess, eine neue PHP-Version nach einer Umstellung durch den Hoster, falsche Dateirechte oder ein PHP Fatal Error, der wegen ausgeschalteter Fehleranzeige nicht sichtbar ist. Die genaue Ursache steht im Fehlerprotokoll (Error-Log). Das sollten Sie lesen, bevor Sie irgendetwas ändern.

Ein 500er-Fehler ist ärgerlich, weil er nichts verrät. Der Browser zeigt eine leere Seite, eine knappe Meldung des Hosters oder eine Standardseite. Für Besucher und Google sieht die Website kaputt aus. Für Sie als Betreiber heißt das: nicht raten, sondern nachsehen.

Was der Fehler bedeutet

Der Statuscode 500 sagt, dass der Server die Anfrage nicht verarbeiten konnte. Absichtlich ohne Details: Fehlermeldungen mit Pfaden, Datenbanknamen oder Code-Ausschnitten sollen Besucher nicht sehen. Auf Live-Servern ist die Anzeige von PHP-Fehlern deshalb üblicherweise ausgeschaltet (display_errors = Off). Das ist richtig so – bedeutet aber, dass ein PHP-Absturz nach außen nur als 500er-Fehler oder weiße Seite erscheint.

Zuerst: das Fehlerprotokoll lesen

Wo Sie das Error-Log finden

Auf Shared Hosting gibt es keinen direkten Serverzugang, aber fast jeder Hoster stellt Protokolle bereit. Suchen Sie im Kundenmenü nach Begriffen wie „Logs“, „Protokolle“, „Fehlerprotokoll“ oder „Error-Log“. In Plesk finden Sie sie bei der jeweiligen Domain unter „Logs“, in cPanel unter „Errors“. Bei manchen Hostern muss das Fehlerprotokoll erst eingeschaltet werden, und es wird oft nur wenige Tage aufbewahrt.

Es gibt meist zwei Arten von Protokollen:

  • Webserver-Fehlerprotokoll (Apache): Hier landen Fehler in der .htaccess und Probleme mit Dateirechten.
  • PHP-Fehlerprotokoll: Hier landen Fatal Errors, Parse Errors und Warnungen aus Ihrem Code.

Ein eigenes PHP-Log anlegen

Bietet Ihr Hoster kein PHP-Log an, schreiben Sie es selbst. Läuft PHP als FastCGI oder PHP-FPM, geht das mit einer .user.ini im Hauptverzeichnis:

log_errors = On
error_log = /absoluter/pfad/ausserhalb/des/webroots/php-error.log

Den absoluten Pfad sehen Sie in Ihrem FTP-Programm oder in der Ausgabe von phpinfo() unter DOCUMENT_ROOT. Liegt die Datei außerhalb des öffentlichen Verzeichnisses, kann sie niemand von außen abrufen.

Für eine schnelle Diagnose können Sie die Fehler auch kurz anzeigen lassen. Ganz oben in der index.php, direkt nach <?php:

ini_set( 'display_errors', '1' );
error_reporting( E_ALL );

Zwei Einschränkungen: Einen Syntaxfehler in genau dieser Datei zeigt das nicht, weil PHP die Datei dann gar nicht erst ausführt. Und entfernen Sie die Zeilen sofort nach der Diagnose wieder.

Das Log richtig lesen

Rufen Sie die kaputte Seite auf und schauen Sie auf die neuesten Einträge mit passender Uhrzeit. Relevant sind Zeilen mit PHP Fatal error oder PHP Parse error. Meldungen wie „Deprecated“ oder „Warning“ verursachen keinen 500er-Fehler. Die können Sie für den Moment ignorieren, auch wenn es viele sind.

Ursache 1: die .htaccess

Die .htaccess steuert Weiterleitungen, schöne URLs und Sicherheitsregeln. Ein Tippfehler oder eine Anweisung, die der Server nicht kennt, legt die ganze Website lahm. Der schnellste Test: Benennen Sie die Datei per FTP in .htaccess_off um. Lädt die Startseite danach wieder (Unterseiten eventuell nicht), liegt der Fehler in der .htaccess.

Typische Einträge im Apache-Log:

  • Invalid command 'php_value', perhaps misspelled or defined by a module not included in the server configuration – php_value funktioniert nur, wenn PHP als Apache-Modul läuft. Bei PHP-FPM oder FastCGI führt es zum 500er-Fehler. Den Wert stattdessen in die .user.ini schreiben.
  • Invalid command 'Header' oder Invalid command 'RewriteEngine' – das zugehörige Apache-Modul ist nicht aktiv.
  • Request exceeded the limit of 10 internal redirects – eine Weiterleitungsschleife in den Rewrite-Regeln.

Regeln für optionale Module schützen Sie mit IfModule. Fehlt das Modul, wird der Block einfach übersprungen:

<IfModule mod_headers.c>
    Header set X-Content-Type-Options "nosniff"
</IfModule>

Ursache 2: neue PHP-Version nach Umstellung durch den Hoster

Hoster stellen veraltete PHP-Versionen um, weil diese keine Sicherheitsupdates mehr bekommen. PHP 7.4 ist seit dem 28.11.2022 ohne Support, PHP 8.0 seit dem 26.11.2023, PHP 8.1 seit dem 31.12.2025. Oft kommt vorher eine E-Mail, die im Alltag untergeht. Danach läuft alter Code nicht mehr. Typische Zeilen im Log:

PHP Fatal error:  Uncaught Error: Call to undefined function mysql_connect()
PHP Fatal error:  Uncaught Error: Call to undefined function each()
PHP Fatal error:  Uncaught Error: Call to undefined function create_function()

Die mysql_*-Funktionen gibt es seit PHP 7.0 nicht mehr, each() und create_function() wurden in PHP 8.0 entfernt. Seit PHP 8.2 gelten außerdem dynamische Properties als veraltet. Das erzeugt keinen 500er, füllt aber das Log mit Deprecated-Meldungen.

Auch der umgekehrte Fall kommt vor: Moderne Software, die mit Composer installiert wurde, prüft die PHP-Version selbst. Läuft eine ältere Version als erwartet, steht im Log etwa „Composer detected issues in your platform“.

Als Übergang können Sie im Kundenmenü des Hosters oft die alte Version wieder auswählen, teilweise nur gegen Aufpreis. Das verschafft Zeit, ist aber keine Lösung: Die alte Version bekommt keine Sicherheitsupdates mehr, und irgendwann wird sie ganz abgeschaltet. Dauerhaft muss der Code an die neue Version angepasst werden.

Ursache 3: falsche Dateirechte

Auf vielen Shared-Hosting-Servern läuft PHP unter Ihrem eigenen Benutzer. Aus Sicherheitsgründen verweigert der Server dann Dateien und Ordner, die für andere beschreibbar sind. Das Ergebnis ist ein 500er-Fehler – oft nach einem Umzug oder nachdem jemand „zur Sicherheit“ alles auf 777 gesetzt hat. Im Log stehen dann Hinweise mit „suexec“ oder „writeable by group“.

Übliche Werte:

  • Ordner: 755
  • Dateien: 644
  • Konfigurationsdateien mit Passwörtern: wenn der Hoster es erlaubt, 640 oder 600

Mit SSH-Zugang setzen Sie die Rechte so:

find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;

Ohne SSH geht es im FTP-Programm: In FileZilla etwa per Rechtsklick auf „Dateiberechtigungen“, mit der Option, die Änderung auf Unterverzeichnisse anzuwenden – getrennt für Ordner und Dateien. 777 ist praktisch nie nötig.

Ursache 4: Fatal Error bei ausgeschalteter Fehleranzeige

Alles, was PHP zum Absturz bringt, erscheint bei abgeschalteter Fehleranzeige als 500er. Häufige Fälle:

  • Parse Error nach einer Änderung am Code, etwa ein fehlendes Semikolon oder eine fehlende Klammer.
  • Unvollständiger Upload: Eine Datei kam nur halb an oder fehlt. Im Log steht dann „Failed opening required“ oder „failed to open stream“.
  • Speicher voll: „Allowed memory size of … bytes exhausted“.
  • Fehlende PHP-Erweiterung: etwa „Call to undefined function imagecreatefromjpeg()“, wenn GD fehlt. Das passiert gern nach einem Wechsel der PHP-Version, wenn die neue Version andere Erweiterungen aktiviert hat.

Die richtige Reihenfolge

  1. Error-Log öffnen und die neueste Fatal-Error- oder Apache-Meldung suchen.
  2. Gibt es kein Log: .htaccess testweise umbenennen.
  3. Im Kundenmenü prüfen, ob sich die PHP-Version geändert hat.
  4. Dateirechte stichprobenartig prüfen, vor allem bei index.php und dem Hauptordner.
  5. Erst dann Code ändern – und immer zuerst eine Kopie der betroffenen Datei sichern.

Fehler, die Sie vermeiden sollten

  • Alles auf 777 setzen. Das macht die Sache nicht besser, sondern auf vielen Servern erst recht kaputt – und unsicher.
  • Die .htaccess löschen statt umbenennen. Ohne sie fehlen Weiterleitungen und Schutzregeln, und eine Kopie haben Sie dann nicht.
  • display_errors dauerhaft eingeschaltet lassen.
  • Die PHP-Version zurückstellen und das Thema vergessen.

Professionelle Hilfe

Finden Sie die Ursache nicht oder zeigt das Log Fehler tief im Code, übernehme ich das. Bei der PHP-Fehlerbehebung werte ich die Protokolle aus und behebe den Fehler im Code – Analyse für 150 € netto, Reparatur ab 290 € netto. Kam der 500er direkt nach einer PHP-Umstellung beim Hoster, finden Sie unter PHP-Umstellung beim Hoster, wie ich alte Anwendungen an die neue Version anpasse.

Geschrieben von Przemysław Milner

Weitere Beiträge

Przemysław Milner Tipps

WordPress ist nicht schlecht – nur schlecht gebaut

Langsam, unsicher, ständig kaputt? Meist liegt das nicht an WordPress, sondern an Pagebuildern, Plugin-Chaos und Multipurpose-Themes. Was ein eigenes Theme anders macht.

Weiterlesen

Przemysław Milner Tipps

WordPress gehackt? So erkennen Sie es

Fremde Seiten bei Google, Weiterleitungen nur auf dem Handy, unbekannte Admins: Diese sechs Anzeichen zeigen, ob Ihre WordPress-Seite gehackt wurde – und was Sie sofort tun sollten.

Weiterlesen