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

392

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

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

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

PHPLOVER
источник
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"

chelmertz
источник
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 за это (комментирует вопрос).

Cullub
источник
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/.

ThorSummoner
источник
11

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

error_log = /var/log/php.errors

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

Mailo
источник
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

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

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

DarkNeuron
источник
4
php --info | grep error

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

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

Если вы используете php5-fpm, лог должен быть по умолчанию

/var/log/php5-fpm.log
mateusz.szymborski
источник
2

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

cfphpflex
источник
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указав другое местоположение файла журнала.

jkdev
источник
2

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

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

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

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

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

или

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

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

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

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

где апач

или

где apache2

Dewlance
источник
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
почетный гражданин
источник