Die PHP-Konfigurationseinstellung „error_log“ funktioniert nicht

Lesezeit: 11 Minuten

Benutzer-Avatar
Jim

Was mache ich hier falsch?

Ich habe error_log zusammen mit in der .ini-Datei festgelegt error_reporting = E_ALL | E_STRICT.

Was fehlt mir noch? Dies hat es mir normalerweise gegeben. Ich möchte diesen Satz in der .ini-Datei und nicht in meinen Skripten.

Eine andere interessante Sache, die passiert, ist, dass Apache immer wieder neu gestartet wird, wenn ich absichtlich versuche, einen Fehler in einem meiner Skripte zu werfen.


Dies ist mein Ereignisprotokoll nach einem Fehler. Sehen Sie sich den Zeitstempel an.

Wed Nov 04 19:34:23 2009] [notice] Apache/2.2.14 (Win32) PHP/5.3.0 configured -- resuming normal operations
[Wed Nov 04 19:34:23 2009] [notice] Server built: Sep 28 2009 22:41:08
[Wed Nov 04 19:34:23 2009] [notice] Parent: Created child process 1700
[Wed Nov 04 19:34:23 2009] [notice] Child 1700: Child process is running
[Wed Nov 04 19:34:23 2009] [notice] Child 3008: Released the start mutex
[Wed Nov 04 19:34:23 2009] [notice] Child 1700: Acquired the start mutex.
[Wed Nov 04 19:34:23 2009] [notice] Child 1700: Starting 64 worker threads.
[Wed Nov 04 19:34:23 2009] [notice] Child 1700: Starting thread to listen on port 80.
[Wed Nov 04 19:34:24 2009] [notice] Child 3008: All worker threads have exited.
[Wed Nov 04 19:34:24 2009] [notice] Child 3008: Child process is exiting
[Wed Nov 04 19:34:53 2009] [notice] Parent: child process exited with status 128 -- Restarting.
[Wed Nov 04 19:34:53 2009] [notice] Apache/2.2.14 (Win32) PHP/5.3.0 configured -- resuming normal operations
[Wed Nov 04 19:34:53 2009] [notice] Server built: Sep 28 2009 22:41:08
[Wed Nov 04 19:34:53 2009] [notice] Parent: Created child process 3656
[Wed Nov 04 19:34:53 2009] [notice] Child 3656: Child process is running
[Wed Nov 04 19:34:53 2009] [notice] Child 3656: Acquired the start mutex.
[Wed Nov 04 19:34:53 2009] [notice] Child 3656: Starting 64 worker threads.
[Wed Nov 04 19:34:53 2009] [notice] Child 3656: Starting thread to listen on port 80.
[Wed Nov 04 19:34:53 2009] [notice] Parent: child process exited with status 128 -- Restarting.
[Wed Nov 04 19:34:54 2009] [notice] Apache/2.2.14 (Win32) PHP/5.3.0 configured -- resuming normal operations
[Wed Nov 04 19:34:54 2009] [notice] Server built: Sep 28 2009 22:41:08
[Wed Nov 04 19:34:54 2009] [notice] Parent: Created child process 3980
[Wed Nov 04 19:34:54 2009] [notice] Child 3980: Child process is running
[Wed Nov 04 19:34:54 2009] [notice] Child 3980: Acquired the start mutex.
[Wed Nov 04 19:34:54 2009] [notice] Child 3980: Starting 64 worker threads.
[Wed Nov 04 19:34:54 2009] [notice] Child 3980: Starting thread to listen on port 80.
[Wed Nov 04 19:34:54 2009] [notice] Parent: child process exited with status 128 -- Restarting.
[Wed Nov 04 19:34:54 2009] [notice] Apache/2.2.14 (Win32) PHP/5.3.0 configured -- resuming normal operations
[Wed Nov 04 19:34:54 2009] [notice] Server built: Sep 28 2009 22:41:08
[Wed Nov 04 19:34:54 2009] [notice] Parent: Created child process 1600
[Wed Nov 04 19:34:54 2009] [notice] Child 1600: Child process is running
[Wed Nov 04 19:34:54 2009] [notice] Child 1600: Acquired the start mutex.
[Wed Nov 04 19:34:54 2009] [notice] Child 1600: Starting 64 worker threads.
[Wed Nov 04 19:34:54 2009] [notice] Child 1600: Starting thread to listen on port 80.
[Wed Nov 04 19:34:55 2009] [notice] Parent: child process exited with status 128 -- Restarting.
[Wed Nov 04 19:34:55 2009] [notice] Apache/2.2.14 (Win32) PHP/5.3.0 configured -- resuming normal operations
[Wed Nov 04 19:34:55 2009] [notice] Server built: Sep 28 2009 22:41:08
[Wed Nov 04 19:34:55 2009] [notice] Parent: Created child process 1068
[Wed Nov 04 19:34:55 2009] [notice] Child 1068: Child process is running
[Wed Nov 04 19:34:55 2009] [notice] Child 1068: Acquired the start mutex.
[Wed Nov 04 19:34:55 2009] [notice] Child 1068: Starting 64 worker threads.
[Wed Nov 04 19:34:55 2009] [notice] Child 1068: Starting thread to listen on port 80.
[Wed Nov 04 19:34:55 2009] [notice] Parent: child process exited with status 128 -- Restarting.
[Wed Nov 04 19:34:55 2009] [notice] Apache/2.2.14 (Win32) PHP/5.3.0 configured -- resuming normal operations
[Wed Nov 04 19:34:55 2009] [notice] Server built: Sep 28 2009 22:41:08
[Wed Nov 04 19:34:55 2009] [notice] Parent: Created child process 3220
[Wed Nov 04 19:34:56 2009] [notice] Child 3220: Child process is running
[Wed Nov 04 19:34:56 2009] [notice] Child 3220: Acquired the start mutex.
[Wed Nov 04 19:34:56 2009] [notice] Child 3220: Starting 64 worker threads.
[Wed Nov 04 19:34:56 2009] [notice] Child 3220: Starting thread to listen on port 80.

Dies wurde 1000 Mal gefragt und ich habe die verschiedenen Beiträge durchsucht, bevor ich dies gepostet habe, aber ich habe keine Antwort gefunden. Seit ich mit PHP programmiere, war es immer ein Albtraum, um zum Laufen zu kommen.

  • Verwandte, um das PHP-Fehlerprotokoll zu finden: Wo speichert PHP das Fehlerprotokoll? (PHP 5, Apache, FastCGI und cPanel) (trotz des überspezifischen Titels).

    – Peter Mortensen

    26. September 2021 um 15:17 Uhr

Benutzer-Avatar
Basilikum Musa

Überprüfen Sie, ob PHP-FPM nicht explizit eingestellt ist error_log:

Stellen Sie sicher, dass die Datei /etc/php-fpm.d/www.conf beinhaltet nicht php_admin_value Einstellungen für Fehlerprotokoll. Suchen Sie nach Folgendem und kommentieren Sie diese mit einem Semikolon aus:

; NOTE: If these are set, ini_set('error_log', 'path') will have no effect
; inside your php code, and this will be forced to be the value always.
; php_admin_value[error_log] = /var/log/php-fpm/www-error.log
; php_admin_flag[log_errors] = on

Starten Sie dann php-fpm neu:

systemctl restart php-fpm

Überprüfen Sie, ob Apache .htaccess-Dateien die Einstellung nicht festlegen error_log Wert verwenden

php_admin_value Einstellungen in den Apache-Konfigurationsdateien können nicht überschrieben werden, stellen Sie also sicher, dass Sie keine haben php_admin_value für die error_log Einstellung in den Apache-Konfigurationsdateien. Prüfen Sie auch nach php_value Einstellungen nur für den Fall.

PHP-Website – So ändern Sie die Konfigurationseinstellungen

  • Lebensretter! Dies löste es für mich, nachdem ich stundenlang mit der Fehlersuche verbracht hatte. Vielen Dank!

    – paulmiller3000

    23. April um 15:00 Uhr

Benutzer-Avatar
Flimmer

Fmms Leitfaden zur Fehlerbehebung

Hier ist meine Anleitung zur Fehlerbehebung error_log() Anrufe funktionieren nicht.

  1. Schau auf dein Serverkonfiguration um herauszufinden, wo sich die Standard-Fehlerprotokolldatei befindet. Dies hängt davon ab, welchen Server Sie verwenden. Um Ihnen den Einstieg zu erleichtern, werfen Sie einen Blick auf Apache ErrorLog Möglichkeit wenn Sie Apache oder Nginx verwenden error_log Möglichkeit wenn Sie Nginx verwenden. Stellen Sie sicher, dass es auf eine Datei eingestellt ist. Wenn Sie ein Tool wie Valet verwenden, beachten Sie, dass hinter den Kulissen Serversoftware wie Nginx verwendet wird.

  2. Überprüf den Berechtigungen der Fehlerprotokolldatei Ihres Servers. Auf Unix-ähnlichen Systemen sollte es vom richtigen Benutzer und der richtigen Gruppe beschreibbar sein, und die Berechtigungen des übergeordneten Verzeichnisses und aller seiner Vorfahren müssen ebenfalls korrekt sein. Verwenden chmod und chown.

  3. Überprüf den Konfiguration von PHP in der .ini Dateien. Suchen Sie insbesondere nach log_errors = On und error_reporting = E_ALL | E_STRICT und error_log = /tmp/example/php_errors.log (siehe Dokumente für log_errors, error_reporting und error_log Konfigurationseinstellungen). Um die zu finden .ini Datei, schauen Sie sich die Ausgabe von an phpinfo();. Wenn error_log nicht festgelegt ist, geht es standardmäßig in das Fehlerprotokoll für den Server, das in den vorherigen Schritten erwähnt wurde. Wenn error_log auf eine Datei gesetzt ist, sollte sie bereits existieren und beschreibbar sein, genau wie in den vorherigen Schritten. Denken Sie daran, den Server nach Konfigurationsänderungen neu zu starten.

  4. Prüfe das Die Einstellungen von PHP werden durch die Serverkonfiguration nicht geändert. Die Konfiguration Ihres Servers (sogar .htaccess) können die PHP-Konfigurationseinstellungen ändern. In Apache geschieht dies mit php_admin_value und php_admin_flag (Dokumente). Zum Beispiel finden Sie in Ihrem .htaccess Datei diese Zeile: php_admin_flag[log_errors] = off. Denken Sie daran, den Server nach Konfigurationsänderungen neu zu starten. An diesem Punkt sollten Sie in der Lage sein, eine Testdatei zu erstellen test.php mit dem Inhalt <?php error_log("test");starten Sie Ihren Server neu und öffnen Sie die URL in Ihrem Browser, und Sie sollten sehen können test in Ihrem Fehlerprotokoll (entweder das des Servers oder das von angegeben error_log = ). Aber lesen Sie weiter.

  5. Prüfe das Die Einstellungen von PHP werden zur Laufzeit nicht geändert. Das log_errors Option kann zur Laufzeit durch Ausführen geändert werden ini_set('log_errors', 1);ebenso wie die anderen Konfigurationsoptionen error_reporting und error_log. Beachten Sie auch, dass es ein Special gibt error_reporting() PHP-Funktion die die Konfiguration zur Laufzeit ändert. Durchsuchen Sie Ihre Codebasis nach Aufrufen von ini_set oder error_reporting. WordPress zum Beispiel führt diese abhängig vom Wert von aus WP_DEBUG.

Andere Dinge, die Sie sich ansehen sollten: Möglicherweise haben Sie Berechtigungsprobleme in SELinux (siehe diese Antwort).

  • Und noch etwas: Wenn Sie auf eine https:-Website zugreifen, müssen Sie in der nachsehen ssl_error_log Datei und nicht das error_log Datei.

    – karldeb

    20. Mai 2019 um 19:36 Uhr

  • @charlesdeb Redest du über Nginx?

    – Flimmer

    23. Mai 2019 um 4:42 Uhr

  • Meine Erfahrung war mit Apache. Ich habe Ewigkeiten damit verbracht, herauszufinden, warum nichts im protokolliert wurde error_log Datei nicht mehr, und dann erkannte, dass es alles gehen würde ssl_error_log (Obwohl einige Installationen alles an senden error_log ob es SSL ist oder nicht.

    – karldeb

    24. Mai 2019 um 14:57 Uhr

  • In meinem Fall hatte die Anwendung selbst eigene Protokolldateien.

    – MeSo2

    16. Januar um 22:31 Uhr

Benutzer-Avatar
Chaos

Sie müssen auch einstellen log_errors = On im Ordner php.ini.

  • Hallo Chaos, danke. Ich habe das bereits auf On gesetzt. Übersehe ich noch etwas?

    – Jim

    5. November 2009 um 2:55 Uhr

  • Starten Sie einfach den Server neu.

    – aagjalpankaj

    7. April 2017 um 5:48 Uhr

  • @aagjalpankaj Kannst du erklären, warum es geholfen hat und warum es kaputt war?

    – Sam Tyurenkov

    16. Dezember 2020 um 14:10 Uhr

  • Wo ist Datei php.ini gelegen? In /etc/php/7.4/apache2/php.ini?

    – Peter Mortensen

    18. September 2021 um 15:56 Uhr

  • OK, ein Weg ist die Zeile mit “Loaded Configuration File” in der Ausgabe aus phpinfo(). Von der Befehlszeile: php -r "phpinfo();" | grep "Loaded Configuration File" (Beispielausgabe: Geladene Konfigurationsdatei => /etc/php/7.4/cli/php.ini). In einem Webkontext: Wenn Testseitendatei test.php exist es enthält einen Aufruf zu phpinfo() – zB URL http://localhost/test.php (Beispielausgabe: /etc/php/7.4/apache2/php.ini).

    – Peter Mortensen

    18. September 2021 um 17:25 Uhr


Benutzer-Avatar
Mel Reams

Falls jemand anderes Probleme hat, seine lokale Entwicklungsumgebung dazu zu bringen, Fehler zu protokollieren, hier ist, was es für mich behoben hat:

Unter Windows, error_log muss auf den vollständigen Pfad zum Protokoll für gesetzt werden error_log() arbeiten (error_log = c:\apache\php_errors.log). jedoch, wenn error_log = php_errors.log ohne Pfad kann PHP immer noch Startfehler protokollieren, wie z

PHP Startup: Dynamische Bibliothek ‘ext\php_mysqli.dll’ kann nicht geladen werden – Das angegebene Modul konnte nicht gefunden werden

Benutzer-Avatar
Thomas Keene

Das Problem, auf das ich gestoßen bin, war, dass das von mir angegebene Fehlerprotokoll schreibgeschützt war. Alle meine .htaccess Die Einstellungen waren korrekt, aber PHP konnte einfach nicht in das Fehlerprotokoll schreiben, weil es keine Berechtigungen hatte. Das hat es für mich richtig behoben:

chmod 777 watermellon-app-errors.log

Offensichtlich wirst du das ändern wollen .Protokoll part zu einer beliebigen Datei, die Sie für ein Protokoll verwenden.

  • Ja, du hast Recht. Natürlich reicht 644 möglicherweise nicht aus, wenn der Besitzer der Datei jemand anderes ist. Sie könnten 777 verwenden, um es zu testen, und dann die Berechtigungen verringern, um zu sehen, was funktioniert.

    – Thomas Keene

    29. August 2013 um 18:42 Uhr


  • In meinem Fall brauchte ich 646 … nur zur Information, falls jemand anderes auf ein Problem wie mich stößt

    – Überholspur

    26. Januar 2016 um 17:17 Uhr

  • Unter Mac OS musste ich 666 verwenden, da die normalen Dateien als root:wheel eingerichtet sind. Ich hätte es wahrscheinlich 646 belassen können, da ich denke, dass Apache standardmäßig als “_www” ausgeführt wird.

    – Phil Glau

    3. März 2017 um 22:19 Uhr

  • chmod 777 = “Setzt Berechtigungen, so dass (Benutzer / Besitzer) lesen, schreiben und ausführen können. (Gruppe) kann lesen, schreiben und ausführen. (Andere) können lesen, schreiben und ausführen.”. Wie sicher ist das?

    – Peter Mortensen

    26. September 2021 um 15:53 ​​Uhr

Benutzer-Avatar
Peter Mortensen

Wenn die Fehlerprotokoll Direktive gesetzt ist, wird die Datei zum Aufzeichnen von PHP-Fehlern verwendet. Wenn es nicht gesetzt ist, werden Fehler im Apache-Protokoll protokolliert. Schauen Sie sich an Fehlerprotokoll.

Die error_log-Datei und das Verzeichnis, in dem sie sich befindet, müssen für den Benutzer, unter dem Apache ausgeführt wird, beschreibbar sein. Wenn die Datei nicht erstellt wird, liegt dies wahrscheinlich an einem Berechtigungsproblem.

Ich weiß nicht genau, warum Apache bei Ihnen abstürzen würde, aber ich vermute, dass es sich um eine Art Berechtigungsproblem handelt.

  • Ja, du hast Recht. Natürlich reicht 644 möglicherweise nicht aus, wenn der Besitzer der Datei jemand anderes ist. Sie könnten 777 verwenden, um es zu testen, und dann die Berechtigungen verringern, um zu sehen, was funktioniert.

    – Thomas Keene

    29. August 2013 um 18:42 Uhr


  • In meinem Fall brauchte ich 646 … nur zur Information, falls jemand anderes auf ein Problem wie mich stößt

    – Überholspur

    26. Januar 2016 um 17:17 Uhr

  • Unter Mac OS musste ich 666 verwenden, da die normalen Dateien als root:wheel eingerichtet sind. Ich hätte es wahrscheinlich 646 belassen können, da ich denke, dass Apache standardmäßig als “_www” ausgeführt wird.

    – Phil Glau

    3. März 2017 um 22:19 Uhr

  • chmod 777 = “Setzt Berechtigungen, so dass (Benutzer / Besitzer) lesen, schreiben und ausführen können. (Gruppe) kann lesen, schreiben und ausführen. (Andere) können lesen, schreiben und ausführen.”. Wie sicher ist das?

    – Peter Mortensen

    26. September 2021 um 15:53 ​​Uhr

Benutzer-Avatar
Peter Mortensen

In meinem Fall auf a CentOS Entwicklungsserver, nach einem vollen yum updatedie Erlaubnis auf /var/log/http geändert wurde 700 und der Benutzer zu ‘root’, so dass der Benutzer ‘apache’ nicht in der Lage war, es einzugeben oder darin zu schreiben.

Es war immer noch in der Lage, in die vorhandene Datei zu schreiben /var/log/httpd/error.logaber es konnte keine neue Datei erstellt werden, da ich Protokolldateien mit Datumssuffix verwende.

Erteilen des Befehls

chown apache /var/log/httpd

Problem gelöst.

  • chmod 700 = „Setzt Berechtigungen so, dass (Benutzer/Eigentümer) lesen, schreiben und ausführen können. (Gruppe) kann nicht lesen, nicht schreiben und nicht ausführen. (Andere) andere können nicht lesen, können kann nicht schreiben und nicht ausführen.”

    – Peter Mortensen

    26. September 2021 um 16:16 Uhr

1228770cookie-checkDie PHP-Konfigurationseinstellung „error_log“ funktioniert nicht

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy