2009-11-05 14 views
19

Dies wurde 1000 mal gefragt und ich habe die verschiedenen Beiträge durchgelesen, bevor ich das hier gepostet habe, aber keine Antwort gefunden habe. Solange ich mit PHP programmiert habe, war das immer ein Albtraum, um arbeiten zu können. Kann mir bitte jemand sagen, was ich hier falsch mache?php error_log funktioniert nicht

Ich habe error_log in der Ini-Datei zusammen mit error_reporting = E_ALL | E_STRICT

Was fehlt mir noch? Das gab es mir normalerweise. Ich möchte das in der Ini-Datei und nicht in meinen Skripten setzen.

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


Dies ist mein Ereignisprotokoll nach einem Fehler. Loot auf dem Zeitstempel

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. 

Antwort

9

Sie auch einstellen log_errors = On müssen.

+3

Hallo Chaos, danke. Ich habe das bereits auf Ein eingestellt. Fehle ich noch etwas? – Jim

+0

Starten Sie den Server einfach neu. – Aviator

-1

Stellen Sie sicher, und stellen auch

display_errors = On 

Und

error_reporting(E_ALL); 

In Ihrem Code versuchen. Oft schließe ich ein Laufzeitfehler-Konfigurationsskript ein, das Fehler beim Entwickeln aktiviert und sie deaktiviert, wenn ich nicht bin. Es sieht etwas in etwa so aus:

if ($debugmode == 'on') { 
    error_reporting(E_ALL); 
    ini_set("display_errors", 1); 
}else { 
    error_reporting(0); 
    ini_set("display_errors", 0); 
} 

Hoffe, das hilft.

** Ich habe das nicht richtig gelesen, Sie wollen Fehler protokollieren, anstatt anzuzeigen, in diesem Fall ist Chaos 'Antwort, was Sie suchen.

+5

dann löschen Sie bitte diesen Beitrag. – mauris

+1

Hallo Jeremy, danke für die Hilfe. :) – Jim

1

Ich verstehe nicht warum, aber das Fehlerprotokoll funktioniert jetzt. Hier ist was ich getan habe. Ich gab auf und kommentierte die Anweisung error_log zurück und schloss die ini-Datei. Ich habe das Skript mit dem Parse-Fehler ausgeführt, um zu sehen, dass Apache immer noch abstürzen würde und ich den PHP-Fehler in der Protokolldatei bekommen habe. Das ist ausgeflippt, weil die ini-Datei nicht mehr fehler_log aktiviert hat und mein Skript nicht ini_set() verwendet.

Hat jemand eine Erklärung für diesen Wahnsinn? Außerdem stürzt Apache nicht mehr ab.

+2

"Madness" ist eine ziemlich gute Erklärung. –

4

Wenn die Anweisung error_log gesetzt ist, wird die Datei für die Aufzeichnung von PHP-Fehlern verwendet, wenn sie nicht gesetzt ist, werden Fehler im Apache-Protokoll protokolliert. Werfen Sie einen Blick auf http://us3.php.net/manual/en/errorfunc.configuration.php#ini.error-log.

Die Datei error_log und das Verzeichnis, in dem sie sich befindet, müssen vom Benutzer, unter dem Apache läuft, beschreibbar sein. Wenn die Datei nicht erstellt wird, liegt das wahrscheinlich an einem Berechtigungsproblem.

Ich weiß nicht genau, warum Apache auf Sie stürzen würde, aber ich vermute, es ist eine Art von Berechtigungen.

+0

Ich stehe korrigiert, danke. Ich habe meine Antwort bearbeitet. – bradym

0

Wie Bradym sagte, überprüfen Sie, ob Sie Schreibrechte für das Verzeichnis, in dem Sie PHP-Fehlerprotokoll für Apache-Benutzer befindet. Wenn Sie eine Protokolldatei mit geschriebenen Berechtigungen erstellt haben, ist dies nicht genug, das Verzeichnis sollte sie auch haben.

0

Das error_log = "C: \ php \ Log \ Fehler.log "funktionierte auch nicht für mich. Die Lösung für mich war, dass Sie das error.log nicht selbst erstellen sollten, weil PHP es für Sie erledigt. See the PHP message board. Ich benutze PHP 5.2 auf einem Windows 2008 Server

7

Das Problem, auf das ich stieß, war, dass das Fehlerprotokoll, das ich angegeben hatte, schreibgeschützt war.Alle meine .htaccess Einstellungen waren korrekt, PHP konnte einfach nicht in das Fehlerprotokoll schreiben, weil es keine Berechtigungen hatte.Dies hat es für mich richtig gemacht:

chmod 777 watermellon-app-errors.log 

Offensichtlich, wirst du die .log ändern wollen, was auch immer Datei, die Sie für ein Protokoll verwenden.

+4

Brauchen die Logs wirklich 777? Ist 644 nicht genug? –

+1

Ja, Sie haben Recht. Natürlich ist 644 möglicherweise nicht genug, wenn der Eigentümer der Datei jemand anderes ist. Sie könnten 777 zum Testen verwenden und dann die Berechtigungen verringern, um zu sehen, was funktioniert. –

+0

In meinem Fall brauchte ich 646 ..Nur für den Fall, dass jemand anderes auf ein Problem wie mich – FastTrack

8

Bei Anyo ne sonst Probleme bei ihrer lokalen Entwicklungsumgebung immer Fehler zu protokollieren, ist hier, was es für mich festgelegt:

auf Fenster, error_log müssen error_log() in das Protokoll auf den vollständigen Pfad gesetzt werden, um Arbeit (error_log = c:\apache\php_errors.log). Wenn jedoch error_log = php_errors.log ohne Pfad, php noch in der Lage seinen Startfehler zu protokollieren wie

PHP Startup: Unable to load dynamic library 'ext\php_mysqli.dll' - The specified module could not be found 
+0

Ich habe den vollständigen Pfad angegeben und die Datei nicht im Voraus erstellt. Wenn ich WAMP neu starte, wird die Protokolldatei erstellt, aber WAMP zeigt ein gelbes Symbol an und localhost wird nicht geladen. Irgendwelche Ideen was das sein könnte? Wenn ich 'error_log' auskommentiere, ist alles in Ordnung, aber PHP Fehler erscheinen im Apache Log. – thomthom

0

So wie es auf meinem Ubuntu funktioniert (Apache 2.4.7, PHP 5.5.9) ist die folgende:

Befehlszeilenskript:

  • schreibt das Protokoll in das von error_log wenn log_errors = On darauf Weg. Einstellungen in /etc/php5/cli/php.ini;

Web-Anfrage via Apache:

  • wenn log_errors = On (/etc/php5/apache2/php.ini), der Fehler in den durch ErrorLog Apache-Direktive in der Virtual wies Pfad angehängt. Wenn diese Direktive nicht existiert, wird der Pfad php.ini error_log verwendet;
  • wenn log_errors = Off nicht Protokolle sind nirgendwo geschrieben;

Soweit ich mich erinnere, es funktionierte fast auf diese Weise in den meisten Linux-Stacks

1

Wenn Sie mit Fedora, SELinux (standardmäßig aktiviert) Apache verhindern/httpd von Fehlern auf Ihre Log-Anhängen Datei, auch wenn Ihre Datei in php.ini angegeben ist und ihr enthaltendes Verzeichnis alle Berechtigungen erlaubt.

Sie können sehen, ob dies durch einen Blick auf Ihre System-Log-Datei in /var geschieht/log/messages

enter image description here

Die ideale Lösung ist SELinux konfigurieren Sie den Zugriff auf die Protokolldatei zu ermöglichen, .

Die schnellere Lösung ist es, SELinux unter /etc/selinux/config zu deaktivieren, indem SELINUX auf deaktiviert gesetzt wird.

Danach müssen Sie das System neustarten, damit die Änderung wirksam wird.

+1

Der Rat, den Sie gaben, hat tatsächlich eine Website, um diesen Rat zu stoppen. http://stopdisablingselinux.com –

+1

Ich weiß, daher mein Schreiben "ideal." Ich bin noch nicht davon überzeugt, dass ein Home User, der lokal arbeitet, SELinux aktiviert hat. – Anthony

0

prüfen PHP-FPM nicht explizit error_log Einstellung ist:

Achten Sie auf die Datei /etc/php-fpm.d/www.conf nicht php_admin_value Einstellungen für error_log enthält. Suchen Sie nach den folgenden und kommentieren sie aus mit einem Semikolon:

; 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 

Dann starten php-fpm:

systemctl restart php-fpm 

prüfen Apache .htaccess-Dateien nicht setzen den error_log Wert mit

php_admin_value Einstellungen in Apache-Konfigurationsdateien können nicht überschrieben werden. Stellen Sie daher sicher, dass Sie keinen php_admin_value für die Einstellung in den Apache-Konfigurationsdateien haben. Überprüfen Sie auch für php_value Einstellungen nur für den Fall.

PHP Website - How to change configuration settings

0

In meinem Fall auf einem CentOS Entwicklungsserver, nach einer vollständigen yum update die Erlaubnis auf /var/log/http-700 und der Benutzer 'root' geändert wurde, so dass der Benutzer " Apache 'konnte nicht hinein oder hinein schreiben. Es war immer noch in der Lage, in die vorhandene Datei /var/log/httpd/error.log schreiben, aber es war nicht in der Lage, eine neue Datei zu erstellen, da ich Protokolldateien mit Datum suffixed. Ausstellen der Befehl

chown apache /var/log/httpd 

das Problem gelöst.

0

Das hat den Trick für mich getan.

setsebool -P httpd_unified 1 

Bitte beachten Sie, dass dies die bevorzugte Methode unten würde zuerst versuchen:

semanage fcontext -a -t httpd_sys_rw_content_t 'errorLogNameHere.error.log 
restorecon -v 'errorLogNameHere.error.log' 

Diese Antwort aus den Protokollen von der Ausführung dieses Befehlszeile abgeleitet wurde:

journalctl -xe 

Weitere Informationen auf dem System lief ich auf: PHP 7.0 und CentOS 7

Nicht sicher, ob es nicht offensichtlich ist, aber das Problem war die Konfiguration von Apache zum Schreiben von Dateien. Ich habe versucht, chmod 777, chmod a + w auf dem Logging-Verzeichnis, aber das hat nicht funktioniert für mich.

Hoffe, das kann jemand helfen.