Heim Backend-Entwicklung PHP-Problem So lösen Sie das PHP 500-Fehlerproblem

So lösen Sie das PHP 500-Fehlerproblem

Dec 29, 2021 am 09:30 AM
500错误 php

Lösung für den PHP-500-Fehler: 1. Überprüfen Sie das PHP-Skript und ändern Sie es. 2. Erfassen Sie die Ausnahme und zeichnen Sie die Ausnahme im Protokoll auf. 3. Analysieren Sie das Protokoll und verarbeiten Sie es.

So lösen Sie das PHP 500-Fehlerproblem

Die Betriebsumgebung dieses Artikels: Windows 7-System, PHP Version 7.1, Dell G3-Computer.

Wie löse ich das PHP-500-Fehlerproblem?

PHP- und 500-Fehler

Während des PHP-Entwicklungsprozesses werden häufig 500-Fehler zurückgegeben und es gibt keinen Debugging-Inhalt (verfügbar) im Hauptteil. Zu diesem Zeitpunkt müssen Sie langsam debuggen (Punkte unterbrechen, Debug-Modus aktivieren usw.). Wenn es sich jedoch um ein Live-Netzwerk handelt, ist dieser Fehler frustrierender. Es ist weder einfach, Punkte zu unterbrechen noch den Debug-Modus zu aktivieren. Aber da es sich um einen Fehler handelt, gibt es immer eine Lösung. Lassen Sie uns die Ursachen und Lösungen von 500 Schritt für Schritt analysieren.

0x01, 500 Fehler

500 Fehler, auch Internal Server Error (interner Dienstfehler) genannt, bedeutet, dass der Dienst die Anfrage aufgrund eines unbekannten Fehlers nicht verarbeiten kann. In PHP-Sites wird es im Allgemeinen von PHP zurückgegeben. Mit anderen Worten, 500-Fehler sind im Allgemeinen Fehler in PHP-Skripten.

So lösen Sie das PHP 500-Fehlerproblem

php-fpm-Erfassungspaket 500

Wie Sie auf dem obigen Bild (Nginx+PHP-FPM-Architektur) sehen können, gibt das Skript einen Fehler aus, wenn PHP eine nicht vorhandene Klasse aufruft und 500 an Nginx zurückgibt (und wird). Die Fehlermeldung wird ebenfalls zurückgegeben, aber in STDERR entladen.

0x02, welche Fehlerausnahmen verursachen 500

Welche Fehler verursachen also 500-Fehler? Alle Fehlerstufen von PHP finden Sie in der offiziellen Dokumentation von PHP (http://php.net/manual/zh/errorfunc .constants.php) und die Fehlerstufen E_ERROR, E_PARSE, E_RECOVERABLE_ERROR, E_USER_ERROR und nicht abgefangene Ausnahmen verursachen alle 500 Fehler. Fehler auf E_ERROR-Ebene, verursacht durch 500 Ausnahme im PHP-Skript, wird es definitiv 500 verursachen? Offensichtlich nicht, selbst wenn das Skript einen schwerwiegenden Fehler aufweist, kann es dennoch 200 zurückgeben.

So lösen Sie das PHP 500-Fehlerproblem

Konfigurationsoption „display_errors“

In Webanwendungen, die auf Python, NodeJS usw. basieren, wird standardmäßig eine Ausnahmemeldung auf der Konsole ausgegeben (STDERR/STDOUT). In PHP, das auf der PHP-FPM-Architektur basiert, gibt es keine Konsole zum Drucken, und stderr und stdout sind in FastCGI auf die entsprechenden STRDERR und STDOUT gesetzt. Wenn der Fehler an STDOUT umgeleitet wird, wird der Fehler direkt in der Antwort ausgegeben und der Statuscode wird auf 200 gesetzt. Dies ist auch die Fähigkeit, die durch die Option display_errors erreicht wird. Die Konfiguration der display_errors-Option muss über ini_set implementiert werden. Die Konfiguration von display_errors im PHP-Dokument gibt an, dass der Wert ein String-Typ ist. Bei der tatsächlichen Verwendung können Zahlen und boolesche Typen diese Konfiguration auch aktivieren oder deaktivieren.

So lösen Sie das PHP 500-Fehlerproblemerror_reporting-Konfiguration

display_errors steuert, ob Fehlerdetails angezeigt werden und ob Fehlerstatuscodes zurückgegeben werden, wenn ein Fehler im PHP-Skript auftritt, während das Element error_reporting verwendet wird, um zu steuern, welche Fehlerstufe direkt gedruckt werden kann.

Die Einstellungselemente von error_reporting können über error_reporting(E_ALL) oder ini_set('error_reporting', E_ALL) konfiguriert werden. Einzelheiten zu den Funktionsparametern finden Sie in der PHP-Dokumentation.

Es ist zu beachten, dass PHP selbst über Fehlerprotokolle verfügt (zwei Konfigurationselemente, error_log und log_errors). Wenn ein Fehler auftritt, wird PHP den Fehler in das Fehlerprotokoll schreiben. Welche Fehler geschrieben werden müssen, wird durch das Element „error_reporting“ beeinflusst. der Kontrolle. Wenn die Fehlerstufe nicht übereinstimmt, werden keine Fehlerdetails angezeigt Alles, was Sie zu diesem Zeitpunkt tun können, ist die Erfassung von Ausnahmen, die erkannt und im Protokoll aufgezeichnet werden, um zukünftiges Debuggen und die Behandlung von Live-Netzwerkfehlern zu erleichtern.

So lösen Sie das PHP 500-Fehlerproblem

PHP wird mit Fehlerprotokoll geliefert

PHP selbst verfügt bereits über Fehlerprotokolleinträge. Sie können das Element „log_errors“ in php.ini auf „Ein“ setzen und mit dem Konfigurationselement „error_log“ zusammenarbeiten, um den Speicherpfad des Fehlerprotokolls anzugeben .

So lösen Sie das PHP 500-Fehlerproblem

Fehlerprotokollierungsschalter

So lösen Sie das PHP 500-Fehlerproblem

Protokollpfadeinstellung

Das Schreiben dieses Fehlerprotokolls wird nicht durch die Konfiguration von display_errors gesteuert. Das heißt, unabhängig davon, ob display_errors aktiviert ist oder nicht, werden Fehler im Protokoll aufgezeichnet. Dies wird jedoch durch die error_reporting-Konfiguration gesteuert. Wenn die aktuelle Fehlerstufe nicht mit der Fehlerstufe in error_reporting übereinstimmt, wird der Fehler nicht in das Protokoll geschrieben. Das heißt, wenn die Fehlerstufe E_ERROR ist, die Einstellung jedoch error_reporting(E_NOTICE) ist, wird die Fehlermeldung E_ERROR nicht im Protokoll angezeigt.

So lösen Sie das PHP 500-Fehlerproblem

Das PHP-Fehlerprotokoll zeichnet verschiedene Arten von Fehlern auf.

So lösen Sie das PHP 500-Fehlerproblem

Das Protokoll wird aufgrund einer Nichtübereinstimmung der Fehlerebene nicht geschrieben Handhabungsfunktion. Die Fehleraufzeichnung kann erreicht werden, indem die erfassten Fehlerinformationen über eine Funktion in das angegebene Protokoll geschrieben werden. Einzelheiten zur Verwendung der

-Funktion finden Sie unter http://km.oa.com/group/19368/articles/show/302491. Hier ist eine Vorlage:

$previousHandler = set_exception_handler(function(Exception $ex) use (&$previousHandler) {
    call_user_func('exceptionHandler', $ex, $previousHandler);
});
set_error_handler('errorHandler');
register_shutdown_function('fatalErrorHandler');
function exceptionHandler(Exception $ex, $previousHandler)
{
    $info = array(
        $ex->getFile(),
        $ex->getLine(),
        $ex->getCode(),
        $ex->getMessage()
    );
    // 记录日志
    logPHPError($info);
    if (isset($previousHandler) && is_callable($previousHandler)) {
        call_user_func($previousHandler, $ex);
    }
}
/**
 * 框架错误处理函数
 * @param $errno
 * @param $errstr
 * @param $errfile
 * @param $errline
 * @return bool
 */
function errorHandler($errno = 0, $errstr = '', $errfile = '', $errline = 0)
{
    switch ($errno) {
        case E_WARNING:
            $errname = 'E_WARNING';
            break;
        case E_NOTICE:
            $errname = 'E_NOTICE';
            break;
        case E_STRICT:
            $errname = 'E_STRICT';
            break;
        case E_RECOVERABLE_ERROR:
            $errname = 'E_RECOVERABLE_ERROR';
            break;
        case E_DEPRECATED:
            $errname = 'E_DEPRECATED';
            break;
        case E_USER_ERROR:
            $errname = 'E_USER_ERROR';
            break;
        case E_USER_WARNING:
            $errname = 'E_USER_WARNING';
            break;
        case E_USER_NOTICE:
            $errname = 'E_USER_NOTICE';
            break;
        case E_USER_DEPRECATED:
            $errname = 'E_USER_DEPRECATED';
            break;
        default:
            restore_error_handler();
            return false;
    }
    // 记录日志
    $info = array(
        $errfile,
        $errline,
        $errname,
        $errstr
    );
    logPHPError($info);
    restore_error_handler();
    return false;
}
/**
 * Fatal error错误处理
 */
function fatalErrorHandler()
{
    if (($e = error_get_last()) && $e['type'] === E_ERROR) {
        $info = array(
            $e['file'],
            $e['line'],
            'E_ERROR',
            $e['message']
        );
        // 记录日志
        logPHPError($info);
    }
}
Nach dem Login kopieren

0x05 Zusammenfassung

Zur Zusammenfassung up, error_reporting wird verwendet, um Funktionen oder Konfigurationen zu steuern, die Fehlerinformationsebenen an den Browser oder das PHP-Fehlerprotokoll ausgeben, und display_errors steuert, ob Fehler- und Warninformationen an den Browser ausgegeben werden. Da das Fehlerprotokoll von PHP global ist und von error_reporting gesteuert wird, wird empfohlen, eine eigene Fehler-(Ausnahme-)Erfassungs- und Aufzeichnungslogik in Ihrem Unternehmen zu implementieren.

Empfohlenes Lernen: „

PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonSo lösen Sie das PHP 500-Fehlerproblem. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

CakePHP arbeitet mit Datenbank CakePHP arbeitet mit Datenbank Sep 10, 2024 pm 05:25 PM

Das Arbeiten mit der Datenbank in CakePHP ist sehr einfach. In diesem Kapitel werden wir die CRUD-Operationen (Erstellen, Lesen, Aktualisieren, Löschen) verstehen.

CakePHP Datum und Uhrzeit CakePHP Datum und Uhrzeit Sep 10, 2024 pm 05:27 PM

Um in cakephp4 mit Datum und Uhrzeit zu arbeiten, verwenden wir die verfügbare FrozenTime-Klasse.

CakePHP-Datei hochladen CakePHP-Datei hochladen Sep 10, 2024 pm 05:27 PM

Um am Datei-Upload zu arbeiten, verwenden wir den Formular-Helfer. Hier ist ein Beispiel für den Datei-Upload.

Besprechen Sie CakePHP Besprechen Sie CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ist ein Open-Source-Framework für PHP. Es soll die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich vereinfachen. CakePHP basiert auf einer MVC-ähnlichen Architektur, die sowohl leistungsstark als auch leicht zu verstehen ist. Modelle, Ansichten und Controller gu

CakePHP erstellt Validatoren CakePHP erstellt Validatoren Sep 10, 2024 pm 05:26 PM

Der Validator kann durch Hinzufügen der folgenden zwei Zeilen im Controller erstellt werden.

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

CakePHP-Protokollierung CakePHP-Protokollierung Sep 10, 2024 pm 05:26 PM

Die Anmeldung bei CakePHP ist eine sehr einfache Aufgabe. Sie müssen nur eine Funktion verwenden. Sie können Fehler, Ausnahmen, Benutzeraktivitäten und von Benutzern durchgeführte Aktionen für jeden Hintergrundprozess wie Cronjob protokollieren. Das Protokollieren von Daten in CakePHP ist einfach. Die Funktion log() wird bereitgestellt

See all articles