Wo speichert PHP das Fehlerprotokoll? (PHP5, Apache, Fastcgi, Cpanel)


392

Ich bin auf Shared Hosting und habe Cpanel, Apache, PHP wird von fastcgi betrieben. Wo speichert PHP das Fehlerprotokoll?

Gibt es eine andere Möglichkeit, das Fehlerprotokoll in einer gemeinsam genutzten Hosting-Umgebung zu finden, anstatt die gesamte Site-Struktur zu durchsuchen, um nach error_log-Dateien zu suchen?

Ich habe Zugriff auf die php.ini(ich verwende PHP Version 5.2.16).


25
Unter Linux entweder /var/log/httpd/error_logoder /var/log/apache2/error.log. Diese Dateien gehören root. Sie müssen also root sein oder verwendet werden sudo, um sie anzuzeigen oder zu lesen.
Eric Leschinski

112
php --info | grep error
Sjas

8
Wenn Sie nach einer Windows-Lösung suchen, verwenden Sie diese Option, um php --info | findstr /r /c:"error_log"zu sehen, wo sich die Protokolldatei befindet.
Boom

1
Es ist ziemlich seltsam für mich ... Ich habe eine Website gehostet und PHP-Protokolle werden in derselben Datei wie Apache-Protokolle gespeichert ... In meinem Admin-Bereich gibt es in Protokollen die Option, das vollständige Apache-Fehlerprotokoll anzuzeigen, wenn ich darauf klicke. Es gibt Fehler, wenn Benutzer Orte eingeben, an denen sie dies beispielsweise nicht tun sollten. Aber auch in derselben Datei gibt es Fehler, die PHP angezeigt hat.
RedClover

@soaku Wenn Sie fastcgi Apache selbst verwenden, wird PHP nicht ausgeführt. Wenn Sie mod_php verwenden, das Apache-Modul, behandelt Apache PHP. Das bedeutet, dass bei Verwendung von mod_php Fehler in Apache-Protokollen auftreten können und werden, aber dies ist bei Verwendung von cgi oder fastcgi nicht der Fall
Gall Annonim

Antworten:


314

PHP speichert Fehlerprotokolle, /var/log/apache2wenn PHP ein Apache2-Modul ist. Freigegebene Hosts speichern häufig Protokolldateien in Ihrem /logUnterverzeichnis des Stammverzeichnisses . Aber ... wenn Sie Zugriff auf eine php.iniDatei haben, können Sie dies tun:

error_log = /var/log/php-scripts.log

Laut dem Kommentar von rinogo : Wenn Sie cPanel verwenden, wird die Master-Protokolldatei, nach der Sie wahrscheinlich suchen, (standardmäßig) unter gespeichert

/usr/local/apache/logs/error_log

Wenn alles andere fehlschlägt, können Sie den Speicherort der Protokolldatei mit überprüfen

<?php phpinfo(); ?>

20
"PHP speichert Fehlerprotokolle in / var / log / apache2, wenn PHP ein Apache2 ist", nicht auf RHEL usw., wobei der Name des Pakets 'httpd' ist. Man kann wirklich nicht davon ausgehen, dass der Name eines Pakets über Distributionen hinweg konsistent ist.
Chelmertz

28
Zu Ihrer Information an Googler - Wenn Sie cPanel verwenden, wird die Master-Protokolldatei, nach der Sie wahrscheinlich suchen, (standardmäßig) am/usr/local/apache/logs/error_log
rinogo

5
Aber überprüfen Sie den Abschnitt 'error_log' von <?php phpinfo(); ?>, um den Pfad zu bestätigen
Doub1ejack

Was ist, wenn es kein Apache2-Modul ist? Zum Beispiel kann es sich um ein fpm-Paket von Debian handeln, das auf Nginx ausgeführt wird.
n611x007

2
Wo wird es in der phpinfo-Sektion angezeigt? in error_log alles, was ich für Schlüssel / Wert sehe, ist 'error_log' und kein tatsächlicher Pfad
Robert Sinclair

86

Versuchen Sie phpinfo(), nach "error_log" zu suchen.


13
Es heißt nur error_log, kein Pfad angegeben. Ich denke, es liegt vielleicht daran, dass es sich um eine gemeinsam genutzte Hosting-Umgebung handelt und wenn wir Zugriff darauf hätten, würden wir alle anderen Site-Fehler sehen.
PHPLOVER

8
@PHPLOVER sagt es dasselbe, wenn Sie es versuchen echo ini_get('error_log');?
Chelmertz

Ich habe das nicht versucht, aber es sagte dasselbe in der Datei php.ini. Also habe ich den Pfad in der Datei php.ini geändert und überprüft, ob es funktioniert und es funktioniert. Protokolliert es immer noch alle Fehler, obwohl ich den Pfad geändert habe, um Fehler zu protokollieren (außerhalb des Dokumentenstamms)? danke phplover
PHPLOVER

2
@ PHPLOVER: Sie können die Berichtsebene leicht mit der Einstellung error_reporting(E_ALL|E_STRICT);se.php.net/manual/en/function.error-reporting.php
chelmertz

3
Meins sagt auch error_log, keine Ahnung, wo man danach suchen soll. Dies trifft nr eins auf Google, beantwortet es aber nicht.
HMR

54

Linux

php --info | grep error 

Das Terminal gibt den Speicherort des Fehlerprotokolls aus.

Windows

php --info | findstr /r /c:"error_log"

Die Eingabeaufforderung gibt den Speicherort des Fehlerprotokolls aus

So legen Sie den Protokollspeicherort fest

Öffnen Sie Ihre php.iniund fügen Sie die folgende Zeile hinzu:

error_log = /log/myCustomLog.log

Danke @chelmertez , @Boom für diese (Kommentare zur Frage).


5
Ich bin auf Linux. Dies erwähnt keinen Protokollspeicherort für mich.
Sirex

1
@Sirex gibt php -infoetwas aus? Sie müssen sicherstellen, dass phptatsächlich PHP
aufgerufen

1
Es ist auch möglich, dass PHP derzeit nichts protokolliert. Wenn das der Fall ist, können Sie öffnen Ihre php.iniund Satz error_reportingan E_ALL & ~E_DEPRECATED & ~E_STRICT, oder was auch immer Fehler , die Sie sehen wollen, dann setzen error_logauf den Pfad zu dem Verzeichnis , in dem Sie Ihre Fehler wollen angemeldet werden. (Hinweis: Dies ist kein vollständiger Pfad zu einer Datei, nur zu einem Verzeichnis.)
Cullub

1
Ich habe nur alte Protokolle in / var / log / httpd / gefunden, wo die meisten Leute empfehlen, nachzuschauen, aber das Laufen hat php --info | grep logmich auf / var / www / logs verwiesen, wo sich die neuesten Protokolle befanden.
ChrisBob

1
Vergessen Sie nicht, Apache neu zu starten, sudo /etc/init.d/apache2 restart
nachdem

31

In einer LAMP-Umgebung richten sich die PHP-Fehler standardmäßig an die folgende Datei.

/var/log/httpd/error_log

Alle Zugriffsprotokolle fallen unter:

/var/log/httpd/access_log

Kommentieren Sie also die Spezifikation der PHP-Fehlerprotokolldatei aus und sie wird einfach hier geschrieben.
Benutzer

17

So finden Sie Ihr PHP-Fehlerprotokoll unter Linux:

eric@dev /var $ sudo updatedb
[sudo] password for eric:
eric@dev /var $ sudo locate error_log

/var/log/httpd/error_log

Ein anderer gleichwertiger Weg:

eric@dev /home/eric $ sudo find / -name "error_log" 2>/dev/null

/var/log/httpd/error_log

12

Es scheint, dass PHP standardmäßig nirgendwo Fehler protokolliert , dieerror_log Schlüssel in php.ini ist in allen Installationen, die ich gesehen habe, auskommentiert.

Generell ich:

  1. Suchen Sie nach php.ini-Dateien. locate php.ini.
  2. Durchsuchen Sie diese Dateien nach dem error_reporting Wert.

    Welches sollte auf die Zusammenführung der PHP-Log-Ebenen eingestellt werden, die für Sie ausreicht.,

    Z.B: E_ALL & ~E_DEPRECATED & ~E_STRICT

  3. Überprüf den error_log Wert, um sicherzustellen, dass er auf einen tatsächlichen Ort verweist und nicht auskommentiert ist.

    Der Standardwert gibt keinen vollständigen Pfad an, nur einen Dateinamen. Ich weiß nicht, wohin dieser Pfad normalerweise aufgelöst wird. Wahrscheinlich /var/log/.


11

Sie sollten den absoluten Pfad verwenden, wenn Sie die Variable error_log in Ihrer Datei php.ini festlegen. Andernfalls werden Fehlerprotokolle entsprechend Ihrem relativen Pfad gespeichert.

error_log = /var/log/php.errors

Eine andere Lösung wäre das Schreiben eines einfachen Skripts, das alle Fehlerprotokolldateien aus dem Verzeichnisbaum auflistet.


10

Dies kann auch der Fall sein, /var/log/apache2/error.logwenn Sie sich in der Google Compute Engine befinden.

Und Sie können den Schwanz so sehen:

tail -f /var/log/apache2/error.log

5

Wenn Sie Apache und PHP aus dem Quellcode erstellt haben, werden die Fehlerprotokolle standardmäßig bei Ihnen generiert, ${Apache install dir}/logs/error_logdh im Allgemeinen /usr/local/apache2/logs/error_log. Andernfalls, wenn Sie es aus dem Repository installiert haben, finden Sie es unter. /var/log/apache2/error_logSie können den Pfad auch in Ihrem Repository festlegen php.iniund ihn durch Aufrufen überprüfen phpinfo().


5

Am besten schauen Sie in Ihre httpd.conf-Datei und sehen, was die Standardeinstellung ist. Es kann auch von Ihrem spezifischen virtuellen Host überschrieben werden. Ich beginne mit einem Blick auf /etc/httpd/conf/httpd.confoder /etc/apache2/httpd.confund suche nach error_log. Es kann entweder als / var / log / httpd / error_log oder /var/log/apache2/error_logeinfach als einfach aufgeführt werden logs/error_log.

In diesem Fall handelt es sich um einen relativen Pfad, dh, er befindet sich unter /etc/httpd/logs/error_log. Wenn Sie es immer noch nicht finden können, überprüfen Sie den unteren Rand Ihrer httpd.conf-Datei und sehen Sie, wo Ihre virtuellen Hosts enthalten sind. Es könnte in /etc/httpd/conf.d/<- als "other" oder "extra" sein. Ihr virtueller Host könnte es dann mit ErrorLog "/ path / to / error_log" überschreiben.


4

Bei der Konfiguration Ihrer Fehlerprotokolldatei in der php.ini können Sie einen absoluten oder einen relativen Pfad verwenden. Ein relativer Pfad wird basierend auf dem Speicherort des generierenden Skripts aufgelöst. In jedem Verzeichnis, in dem sich Skripte befinden, wird eine Protokolldatei angezeigt. Wenn alle Fehlermeldungen in dieselbe Datei verschoben werden sollen, verwenden Sie einen absoluten Pfad zu die Datei.

Weitere Informationen finden Sie hier: http://www.php.net/manual/en/ref.errorfunc.php#53025


Danke, das hat mein Problem gelöst. Wirklich lahmes Verhalten für relative Definitionen, Protokolldateien im gesamten htdocs-Ordner verteilt zu haben und keine Ahnung, wo man anfangen soll. Ich hätte erwartet, relativ zu dem Installationsordner zu sein, wie andere Einstellungen. +1.
Eduardo

4

NGINX speichert es normalerweise in /var/log/nginx/error.log oder access.log. (Auf jeden Fall unter Ubuntu)


4
php --info | grep error

Das ist hilfreich. kommentiert von sjas auf frage. Also habe ich es als Antwort aufgenommen.


2
(Es scheint) dies gibt den Wert für die PHP-Befehlszeileneinstellungen (z. B. /etc/php/7.1/cli/php.ini) anstelle der Apache-Einstellungen aus.
BrianHenryIE

3

Wenn Sie php5-fpm verwenden, sollte das Protokoll standardmäßig unter sein

/var/log/php5-fpm.log

2

wo immer Sie es wollen, wenn Sie es Ihren Funktionsaufruf setzen: error_log ($ errorMessageforLog. "\ n", 4, 'somePath / SomeFileName.som');


2

Durchsuchen Sie die Datei httpd.conf, ErrorLogindem Sie sie cat <file location> | grep ErrorLogin der Befehlszeile ausführen . Zum Beispiel:

$ cat /etc/apache2/httpd.conf | grep ErrorLog

Ausgabe:

# ErrorLog: The location of the error log file.
# If you do not specify an ErrorLog directive within a <VirtualHost>
ErrorLog "/private/var/log/apache2/error_log"

Finden Sie die Zeile, die mit beginnt, ErrorLogund es gibt Ihre Antwort.

Hinweis: Bei virtuellen Hosts können Sie die Datei für virtuelle Hosts bearbeiten httpd-vhosts.conf, um einen anderen Speicherort für die Protokolldatei anzugeben.


2

cPanel-Fehlerprotokolle befinden sich in:

/ usr / local / cpanel / logs /

/ usr / local / apache / logs /

Standardmäßig befinden sich Apche-Protokolle in:

/ var / log / apache

oder

/ var / log / apache2

Wenn jemand einen benutzerdefinierten Protokollspeicherort verwendet, können Sie dies überprüfen, indem Sie den folgenden Befehl ausführen:

cat / etc / apache2 / conf /httpd.conf | grep ErrorLog

Wenn Sie die Fehlermeldung erhalten, dass das Verzeichnis apache2 nicht vorhanden ist, können Sie diesen Befehl ausführen, um den richtigen Speicherort zu finden, indem Sie:

Wo ist Apache?

oder

wo ist apache2


1
  1. Sie können in den Ordner "File Manager Check Logs" wechseln.
  2. Überprüfen Sie die Protokolldatei im Ordner public_html.
  3. Überprüfen Sie die Datei "php phpinfo ()", in der sich der Protokollspeicher befindet.

1

Sie befinden sich in einer Freigabeumgebung und können kein Fehlerprotokoll finden. Überprüfen Sie immer, ob cPanel die Option Fehler in Ihrem cPanel-Dashboard enthält. Wenn Sie das Fehlerprotokoll nicht finden können, finden Sie es dort.

In der cPanel-Suchleiste "Fehler suchen" werden Fehlerseiten angezeigt, bei denen es sich im Wesentlichen um Listen verschiedener http-Fehlerseiten handelt. Bei anderen Fehlern werden die Fehlerprotokolle angezeigt.

Andere Orte, an denen Sie in der freigegebenen Umgebung nachsehen können: / home / Ihr Benutzername / logs / home / Ihr Benutzername / public_html / error_log


1

etwas wie das :

sudo locate error.log | xargs -IX grep -iH "errorlog" X

oder

sudo locate error_log | xargs -IX grep -iH "errorlog" X

oder

sudo find / -iname "error?log" 2>/dev/null | xargs -IX grep -iH "errorlog" X

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.