Gdzie PHP przechowuje dziennik błędów? (php5, apache, fastcgi, cpanel)


392

Jestem na wspólnym hostingu i mam Cpanel, Apache, PHP jest prowadzony przez fastcgi. Gdzie PHP przechowuje dziennik błędów?

Czy jest jakiś inny sposób, aby znaleźć dziennik błędów we współdzielonym środowisku hostingowym, zamiast przeglądać całą strukturę witryny w poszukiwaniu plików dziennika błędów?

Mam dostęp do php.ini(Używam PHP w wersji 5.2.16).


25
W systemie Linux albo /var/log/httpd/error_logalbo /var/log/apache2/error.log. Te pliki są własnością root, więc musisz być rootem lub użyć, sudoaby je zobaczyć lub przeczytać.
Eric Leschinski,

112
php --info | grep error
sjas

8
Jeśli szukasz rozwiązania dla systemu Windows, użyj, php --info | findstr /r /c:"error_log"aby zobaczyć, gdzie znajduje się plik dziennika.
Boom

1
To jest dla mnie dość dziwne ... Prowadziłem witrynę, a dzienniki PHP są przechowywane w tym samym pliku, co dzienniki Apache ... W moim panelu administracyjnym, w dziennikach, jest opcja pokazania pełnego dziennika błędów Apache po kliknięciu, występują na przykład błędy związane z wchodzeniem użytkowników do miejsc, w których nie powinni. Ale również w tym samym pliku są błędy, które pokazał PHP.
RedClover,

@soaku, jeśli używasz fastcgi, sam apache nie uruchamia PHP. gdy używasz mod_php, który jest modułem apache, apache obsługuje php. Oznacza to, że błędy mogą i prawdopodobnie będą znajdować się w logach apache podczas korzystania z mod_php, ale nie będzie tak w przypadku używania cgi lub fastcgi
Gall Annonim

Odpowiedzi:


314

PHP przechowuje logi błędów, /var/log/apache2jeśli PHP jest modułem apache2. Hosty współdzielone często przechowują pliki dziennika w /logpodfolderze katalogu głównego . Ale ... jeśli masz dostęp do php.inipliku, możesz to zrobić:

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

Zgodnie z komentarzem rinogo : Jeśli używasz cPanel, główny plik dziennika, którego prawdopodobnie szukasz, jest przechowywany (domyślnie) w

/usr/local/apache/logs/error_log

Jeśli wszystko inne zawiedzie, możesz sprawdzić lokalizację pliku dziennika za pomocą

<?php phpinfo(); ?>

20
„Php przechowuje logi błędów w / var / log / apache2, jeśli php jest apache2”, nie na RHEL itp., Gdzie nazwa pakietu to „httpd”. Naprawdę nie można zakładać, że nazwa pakietu jest spójna w różnych dystrybucjach.
chelmertz

28
Informacje dla pracowników Google - jeśli używasz cPanel, główny plik dziennika, którego prawdopodobnie szukasz, jest przechowywany (domyślnie) w/usr/local/apache/logs/error_log
rinogo

5
ale sprawdź sekcję „error_log”, <?php phpinfo(); ?>aby potwierdzić ścieżkę
doub1ejack

co jeśli nie jest to moduł apache2. na przykład może to być pakiet fpm debiana działający na nginx.
n611x007

2
gdzie w sekcji phpinfo to pokaże? w error_log wszystko co widzę dla klucza / wartości to „error_log” i brak rzeczywistej ścieżki
Robert Sinclair

86

Spróbuj wyszukać phpinfo()„dziennik błędów”


13
Mówi tylko, że error_log nie określono ścieżki. Myślę, że może dlatego, że znajduje się na wspólnym środowisku hostingu i gdybyśmy mieli do niego dostęp, zobaczylibyśmy błędy strony.
PHPLOVER

8
@PHPLOVER czy to samo mówi, jeśli spróbujesz echo ini_get('error_log');?
chelmertz

nie próbowałem tego, ale w pliku php.ini było tak samo, więc zmieniłem ścieżkę w pliku php.ini i sprawdziłem, czy działa. Czy nadal rejestruje wszystkie błędy, chociaż zmieniłem ścieżkę do rejestrowania błędów (poza katalogiem głównym dokumentu)? dzięki phplover
PHPLOVER

2
@PHPLOVER: można łatwo kontrolować poziom raportowania za pomocą ustawienia error_reporting(E_ALL|E_STRICT);se.php.net/manual/en/function.error-reporting.php
chelmertz

3
Mój mówi też error_log, nie mam pojęcia, gdzie go szukać. To uderza numer jeden w google, ale nie odpowiada.
HMR,

53

Linux

php --info | grep error 

Terminal wyświetli lokalizację dziennika błędów.

Windows

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

Wiersz polecenia wyświetli lokalizację dziennika błędów

Aby ustawić lokalizację dziennika

Otwórz php.inii dodaj następujący wiersz:

error_log = /log/myCustomLog.log

Dzięki @chelmertez , @Boom za te (komentarze do pytania).


5
jestem na Linuksie. nie wspomina o mnie lokalizacji dziennika.
Sirex

1
@Sirex generuje php -infocoś? Musisz upewnić się, że phpfaktycznie dzwoni do PHP, aby uruchomić ...
Cullub,

1
Możliwe jest również, że php obecnie niczego nie loguje. W takim przypadku możesz otworzyć własne błędy php.inii ustawić error_reportingje E_ALL & ~E_DEPRECATED & ~E_STRICT, lub cokolwiek innego, co chcesz zobaczyć, a następnie ustawić error_logścieżkę do katalogu, w którym chcesz się zalogować. (Uwaga: nie jest to pełna ścieżka do pliku, tylko do katalogu.)
Cullub,

1
Znalazłem tylko stare logi w / var / log / httpd /, gdzie większość ludzi zaleca szukanie, ale uruchomienie php --info | grep logskierowało mnie w stronę / var / www / logs, gdzie znajdowały się najnowsze logi.
ChrisBob,

1
Po ustawieniu lokalizacji dziennika nie zapomnij ponownie uruchomić Apache:sudo /etc/init.d/apache2 restart
BrianHenryIE

31

W środowisku LAMP błędy php są domyślnie kierowane do tego pliku poniżej.

/var/log/httpd/error_log

Wszystkie dzienniki dostępu znajdują się w:

/var/log/httpd/access_log

Więc skomentuj specyfikację pliku dziennika błędów php, a on po prostu napisze tutaj?
Użytkownik

17

Jak znaleźć dziennik błędów PHP w systemie Linux:

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

/var/log/httpd/error_log

Inny równoważny sposób:

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

/var/log/httpd/error_log

12

Wygląda na to, że domyślnie php nigdzie nie rejestruje błędów,error_log klucz w php.ini jest komentowany we wszystkich instalacjach, które widziałem.

Ogólnie ja:

  1. poszukaj plików php.ini. locate php.ini.
  2. Wyszukaj w tych plikach error_reportingwartość;

    Które należy ustawić na dowolną kombinację poziomów logów php. ,

    Na przykład: E_ALL & ~E_DEPRECATED & ~E_STRICT

  3. Sprawdź error_logwartość, aby upewnić się, że wskazuje rzeczywiste miejsce i nie jest komentowana.

    Domyślna wartość nie podaje pełnej ścieżki, tylko nazwę pliku, nie wiem, gdzie ta ścieżka jest normalnie rozpoznawana. Prawdopodobnie /var/log/.


11

Powinieneś użyć ścieżki bezwzględnej podczas ustawiania zmiennej error_log w pliku php.ini, w przeciwnym razie dzienniki błędów będą przechowywane zgodnie z twoją względną ścieżką.

error_log = /var/log/php.errors

Innym rozwiązaniem byłoby pisanie prostego skryptu, który wyświetlałby wszystkie pliki dzienników błędów z drzewa katalogów.


10

Może tak być również w /var/log/apache2/error.logprzypadku silnika obliczeniowego Google.

I możesz zobaczyć ogon w ten sposób:

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

5

Jeśli zbudowałeś Apache i PHP ze źródła, wówczas dzienniki błędów domyślnie są generowane na twoim, ${Apache install dir}/logs/error_logtj /usr/local/apache2/logs/error_log. Ogólnie . W przeciwnym razie, jeśli zainstalowałeś go z repozytorium, znajdziesz go w /var/log/apache2/error_log. Możesz również ustawić ścieżkę w swoim php.inii zweryfikować, wywołując phpinfo().


5

Najlepszym sposobem jest przejrzenie pliku httpd.conf i sprawdzenie, jaka jest wartość domyślna. Może to również zostać zastąpione przez konkretnego wirtualnego hosta. Zaczynam od przeglądania /etc/httpd/conf/httpd.conflub /etc/apache2/httpd.confszukania dziennika błędów. Może być wymieniony jako / var / log / httpd / error_log lub /var/log/apache2/error_logmoże być również wymieniony jako prosty logs/error_log.

W tym przypadku jest to ścieżka względna, co oznacza, że ​​będzie pod nią /etc/httpd/logs/error_log. Jeśli nadal nie możesz go znaleźć, sprawdź na dole pliku httpd.conf i sprawdź, gdzie znajdują się Twoje wirtualne hosty. Może być w /etc/httpd/conf.d/<- jako „inne” lub „dodatkowe”. Twój wirtualny host może to zastąpić za pomocą ErrorLog „/ path / to / error_log”.


4

Podczas konfigurowania pliku dziennika błędów w php.ini można użyć ścieżki bezwzględnej lub ścieżki względnej. Ścieżka względna zostanie rozstrzygnięta na podstawie położenia skryptu generującego, a otrzymasz plik dziennika w każdym katalogu, w którym znajdują się skrypty. Jeśli chcesz, aby wszystkie komunikaty o błędach były kierowane do tego samego pliku, użyj ścieżki bezwzględnej do plik.

Zobacz więcej tutaj: http://www.php.net/manual/en/ref.errorfunc.php#53025


Dzięki, to rozwiązało mój problem. Naprawdę kiepskie zachowanie dla definicji względnych, aby pliki dziennika były rozłożone w całym folderze htdocs, i nie mam pojęcia, od czego zacząć. Spodziewałbym się być względny względem folderu instalacyjnego, podobnie jak inne ustawienia. +1.
Eduardo

4

NGINX zwykle przechowuje go w /var/log/nginx/error.log lub access.log. (W każdym razie na Ubuntu)


4
php --info | grep error

To jest pomocne. skomentował sjas na pytanie. więc podałem to jako odpowiedź.


2
(Wygląda na to), że wyprowadza to wartość ustawień wiersza poleceń PHP (np. /Etc/php/7.1/cli/php.ini) zamiast ustawień Apache.
BrianHenryIE


2

gdziekolwiek chcesz, jeśli ustawisz, wywołanie funkcji: error_log ($ errorMessageforLog. "\ n", 4, 'somePath / SomeFileName.som');


2

Wyszukaj plik httpd.conf, ErrorLoguruchamiając cat <file location> | grep ErrorLoggo z wiersza polecenia. Na przykład:

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

Wynik:

# 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"

Znajdź linię zaczynającą się od, ErrorLoga znajdziesz odpowiedź.

Uwaga: W przypadku hostów wirtualnych możesz edytować plik hostów wirtualnych, httpd-vhosts.confaby określić inną lokalizację pliku dziennika.


2

Dzienniki błędów cPanel znajdują się w:

/ usr / local / cpanel / logs /

/ usr / local / apache / logs /

Domyślnie dzienniki Apche znajdują się wewnątrz:

/ var / log / apache

lub

/ var / log / apache2

Jeśli ktoś używa niestandardowej lokalizacji dziennika, możesz to sprawdzić, uruchamiając następujące polecenie:

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

Jeśli pojawia się błąd, że katalog apache2 nie istnieje, możesz uruchomić to polecenie, aby znaleźć poprawną lokalizację poprzez:

Whereis Apache

lub

whereis apache2


1
  1. możesz przejść do folderu dzienników kontroli menedżera plików.
  2. zaznacz Plik dziennika w folderze public_html.
  3. zaznacz plik „php phpinfo ()”, w którym znajduje się dziennik.

1

Jesteś w środowisku udostępniania i nie możesz znaleźć dziennika błędów, zawsze sprawdź, czy cPanel ma opcję Błędy na pulpicie cPanel. Jeśli nie możesz znaleźć dziennika błędów, możesz go tam znaleźć.

Na pasku wyszukiwania cPanel, wyszukaj Błąd, pokaże Strony Błędów, które są w zasadzie listami różnych stron błędów HTTP, a inny Błąd to miejsce, w którym wyświetlane są dzienniki błędów.

Inne miejsca, w których można przeglądać udostępnione środowisko: / home / twoja nazwa użytkownika / logs / home / twoja nazwa użytkownika / public_html / error_log


1

coś takiego :

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

lub

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

lub

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.