Где PHP хранит журнал ошибок? (php5, apache, fastcgi, cpanel)


392

Я на виртуальном хостинге, и у меня есть Cpanel, Apache, PHP управляется fastcgi. Где PHP хранит журнал ошибок?

Есть ли другой способ найти журнал ошибок в среде общего хостинга вместо того, чтобы просматривать всю структуру сайта для поиска файлов error_log?

У меня есть доступ к php.ini(я использую PHP версии 5.2.16).


25
В Linux либо /var/log/httpd/error_logлибо /var/log/apache2/error.log. Эти файлы принадлежат пользователю root, поэтому вам нужно быть пользователем root или использовать его sudoдля просмотра или чтения.
Эрик Лещинский

112
php --info | grep error
sjas

8
Для тех, кто ищет решение для Windows, используйте, php --info | findstr /r /c:"error_log"чтобы увидеть, где находится файл журнала.
бум

1
Это довольно странно для меня ... Я разместил веб-сайт, и журналы PHP хранятся в том же файле, что и журналы Apache ... На моей панели администратора в журналах есть возможность показывать полный журнал ошибок Apache, когда я нажимаю на него, например, есть ошибки при входе пользователей в места, где они не должны. Но, кроме того, в том же файле есть ошибки, которые показал PHP.
RedClover

@soaku, если вы используете fastcgi, apache сам не запускает PHP. когда вы используете mod_php, который является модулем apache, apache обрабатывает php. Это означает, что ошибки могут и, вероятно, будут присутствовать в логах apache при использовании mod_php, но это не будет так при использовании cgi или fastcgi
Gall Annonim

Ответы:


315

PHP хранит журналы ошибок, /var/log/apache2если PHP является модулем apache2. Общие хосты часто хранят файлы журналов в вашей подпапке корневого каталога /log. Но ... если у вас есть доступ к php.iniфайлу, вы можете сделать это:

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

Согласно комментарию rinogo : если вы используете cPanel, основной файл журнала, который вы, вероятно, ищете, хранится (по умолчанию) в

/usr/local/apache/logs/error_log

Если ничего не помогает, вы можете проверить местоположение файла журнала, используя

<?php phpinfo(); ?>

20
«Php хранит журналы ошибок в / var / log / apache2, если php является apache2», а не в RHEL и т. Д., Где имя пакета - «httpd». Никто не может предположить, что имя пакета одинаково для всех дистрибутивов.
Челмерц

28
К сведению Googlers - Если вы используете cPanel, основной файл журнала, который вы, вероятно, ищете, хранится (по умолчанию) в/usr/local/apache/logs/error_log
rinogo

5
но проверить раздел «error_log» о , <?php phpinfo(); ?>чтобы подтвердить путь
doub1ejack

Что делать, если это не модуль apache2. например, это может быть пакет Debian для fpm, работающий на nginx.
n611x007

2
где в разделе phpinfo это будет показано? в error_log все, что я вижу для ключа / значения, это «error_log» и никакого фактического пути
Robert Sinclair

86

Попробуйте phpinfo()и проверьте "error_log"


13
Он просто говорит error_log, путь не указан. Я полагаю, что это возможно, потому что он находится в среде общего хостинга, и если бы у нас был к нему доступ, мы бы увидели все ошибки сайта.
PHPLOVER

8
@PHPLOVER это говорит то же самое, если вы пытаетесь echo ini_get('error_log');?
Chelmertz

я не пробовал, но он сказал то же самое в файле php.ini, поэтому я изменил путь в файле php.ini и проверил, работает ли он. Это все еще регистрирует все ошибки, хотя я изменил путь к ошибкам регистрации (вне корня документа)? спасибо phplover
PHPLOVER

2
@PHPLOVER: вы можете легко контролировать уровень отчетности с помощью параметра error_reporting(E_ALL|E_STRICT);se.php.net/manual/en/function.error-reporting.php
chelmertz

3
Мой тоже пишет error_log, не знаю, где его искать. Это находит номер один в Google, но не отвечает.
HMR

54

Linux

php --info | grep error 

Терминал выведет местоположение журнала ошибок.

Windows

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

Командная строка выведет местоположение журнала ошибок

Чтобы установить местоположение журнала

Откройте свой php.iniи добавьте следующую строку:

error_log = /log/myCustomLog.log

Спасибо @chelmertez , @Boom за это (комментирует вопрос).


5
я на Linux. это не упоминает местоположение журнала для меня.
Sirex

1
@Sirex что- php -infoнибудь выводит? Вы должны убедиться, что phpна самом деле вызывает PHP для запуска ...
Cullub

1
Также возможно, что php в данный момент ничего не регистрирует. Если это так, то вы можете открыть php.iniи набор error_reportingдля E_ALL & ~E_DEPRECATED & ~E_STRICT, или то , что ошибки вы хотите увидеть, а затем установить error_logна путь к каталогу , в котором вы хотите , чтобы ваши ошибки , чтобы войти. (Примечание: это не полный путь к файлу, просто к каталогу.)
Cullub

1
Я нашел только старые журналы в / var / log / httpd /, где большинство людей рекомендуют искать, но запуск php --info | grep logуказал мне на / var / www / logs, где находились самые последние журналы.
ChrisBob

1
После того, как вы установите местоположение журнала, не забудьте перезапустить Apache:sudo /etc/init.d/apache2 restart
BrianHenryIE

31

В среде LAMP ошибки php по умолчанию направлены на этот файл ниже.

/var/log/httpd/error_log

Все журналы доступа подпадают под:

/var/log/httpd/access_log

Так закомментируйте спецификацию файла журнала ошибок php, и он просто напишет здесь?
Пользователь

17

Как найти свой журнал ошибок PHP в Linux:

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

/var/log/httpd/error_log

Еще один эквивалентный способ:

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

/var/log/httpd/error_log

12

Похоже, что по умолчанию php нигде не регистрирует ошибки,error_log ключ в php.ini закомментирован во всех установках, которые я видел.

Вообще я:

  1. ищите файлы php.ini. locate php.ini,
  2. Поиск этих файлов для error_reportingзначения;

    Который должен быть установлен на любое объединение уровней журнала php, достаточно для вас. ,

    Например: E_ALL & ~E_DEPRECATED & ~E_STRICT

  3. Проверьте error_logзначение, чтобы убедиться, что оно указывает на фактическое место и не закомментировано.

    Значение по умолчанию не дает полный путь, только имя файла, я не знаю, где этот путь обычно разрешается. Наверное /var/log/.


11

Вы должны использовать абсолютный путь при установке переменной error_log в файле php.ini, в противном случае журналы ошибок будут сохраняться в соответствии с вашим относительным путем.

error_log = /var/log/php.errors

Другим решением было бы написать простой скрипт, который бы перечислял все файлы журналов ошибок из дерева каталогов.


10

Это также может быть, /var/log/apache2/error.logесли вы находитесь в Google Compute Engine.

И вы можете посмотреть хвост так:

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

5

Если у вас есть сборки Apache и PHP из исходников, то журналы ошибок по умолчанию генерируются в вашем ${Apache install dir}/logs/error_logт.е. в целом /usr/local/apache2/logs/error_log. Иначе, если вы установили его из репозитория, вы найдете его в. /var/log/apache2/error_logВы также можете указать путь в вашем хранилище php.iniи проверить его, вызвав phpinfo().


5

Лучший способ - заглянуть в ваш файл httpd.conf и посмотреть, что по умолчанию. Он также может быть переопределен вашим конкретным виртуальным хостом. Я начинаю с просмотра /etc/httpd/conf/httpd.confили /etc/apache2/httpd.confи ищу error_log. Он может быть указан как / var / log / httpd / error_log или /var/log/apache2/error_logтакже может быть указан просто logs/error_log.

В этом случае это относительный путь, что означает, что он будет ниже /etc/httpd/logs/error_log. Если вы все еще не можете найти его, проверьте нижнюю часть вашего файла httpd.conf и посмотрите, где находятся ваши виртуальные хосты. Это может быть в /etc/httpd/conf.d/<- как «другой» или «дополнительный». Тогда ваш виртуальный хост может переопределить его с помощью ErrorLog "/ path / to / error_log".


4

При настройке файла журнала ошибок в php.ini вы можете использовать абсолютный или относительный путь. Относительный путь будет определяться в зависимости от местоположения генерирующего скрипта, и вы получите файл журнала в каждом каталоге, в котором есть скрипты. Если вы хотите, чтобы все ваши сообщения об ошибках шли в один и тот же файл, используйте абсолютный путь к файл.

Подробнее здесь: http://www.php.net/manual/en/ref.errorfunc.php#53025


Спасибо, это решило мою проблему. Действительно отстойное поведение для относительных определений, чтобы файлы журналов распространялись по всей папке htdocs, и не представляли, с чего начать. Я бы ожидал быть относительно установочной папки, как и другие настройки. +1.
Эдуардо

4

Обычно NGINX хранит его в /var/log/nginx/error.log или access.log. (На Ubuntu в любом случае)


4
php --info | grep error

Это полезно прокомментировал sjas на вопрос. так что я включил это как ответ.


2
(Кажется) это выводит значение для настроек командной строки PHP (например, /etc/php/7.1/cli/php.ini), а не настроек Apache.
BrianHenryIE


2

Где бы вы ни захотели, если вы установили вызов своей функции: error_log ($ errorMessageforLog. "\ n", 4, 'somePath / SomeFileName.som');


2

Найдите файл httpd.conf ErrorLog, запустив его cat <file location> | grep ErrorLogв командной строке. Например:

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

Вывод:

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

Найдите строку, которая начинается с, ErrorLogи вот ваш ответ.

Примечание. Для виртуальных хостов вы можете отредактировать файл виртуальных хостов, httpd-vhosts.confуказав другое местоположение файла журнала.


2

Журналы ошибок cPanel находятся в:

/ USR / местные / Cpanel / журналы /

/ USR / местные / Apache / журналы /

По умолчанию журналы Apche расположены внутри:

/ Вар / Журнал / апач

или

/ Вар / Журнал / apache2

Если кто-то использует пользовательское местоположение журнала, вы можете проверить его, выполнив следующую команду:

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

Если вы получаете сообщение об ошибке, что каталог apache2 не существует, вы можете запустить эту команду, чтобы найти правильное местоположение:

где апач

или

где apache2


1
  1. Вы можете зайти в папку File Manager Check Logs.
  2. проверьте файл журнала в папке public_html.
  3. проверьте файл php phpinfo (), где хранится журнал.

1

Вы находитесь в общей среде и не можете найти журнал ошибок, всегда проверяйте, есть ли у cPanel опция Errors на вашей панели управления cPanel. Если вы не можете найти журнал ошибок, то вы можете найти его там.

На панели поиска cPanel, Search Error, будут отображаться страницы ошибок, которые в основном представляют собой списки различных страниц ошибок http, а другие ошибки - это места, где отображаются журналы ошибок.

Другие места для поиска в общей среде: / home / имя пользователя / журналы / home / имя пользователя / public_html / error_log


1

что-то вроде этого :

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

или

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

или

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.