LINUX.ORG.RU
ФорумAdmin

PHP 7.2.15 на Apache/2.4.38 (Ubuntu16.04.1+deb.sury.org+1) не ведёт логи

 


0

1

После обновления системы на VPS с Ubuntu14.04 на Ubuntu16.04 возникла проблема, что у нескольких сайтов на одном движке обрезался функционал - не выводятся посты в категориях. В процессе поиска ошибок наткнулся на то, что новый PHP не ведет логи - в настройках php.ini это было отключено.

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

Итак, что я сделал - создал папку www-data в /var/log с правами 755 для пользователя www-data, под которым работает Апач у меня. В этой папке создал файл для логов, установил на него права 644 для www-data.

Прописал всё это в php.ini:

; Log errors to specified file. PHP's default behavior is to leave this value
; empty.
; http://php.net/error-log
; Example:
error_log = /var/log/www-data/php-scripts.log
; Log errors to syslog (Event Log on Windows).
;error_log = syslog

Сохранил, перегрузил Апач - и ничего не логируется.

Вот что выдаёт <?php phpinfo();?> по поводу логирования:

error_log /var/log/www-data/php-scripts.log /var/log/www-data/php-scripts.log
log_errors On On
error_reporting 22527 22527

Что ещё можно сделать, чтобы PHP начал писать логи?



Последнее исправление: ti1 (всего исправлений: 1)

Ответ на: комментарий от vinvlad

Теперь phpinfo() даёт следующее:

error_reporting	32767	32767

Но файл по-прежнему пустой - не пишется туда ничего.

Может быть вызвать какую-то 100%-ную ошибку PHP, которая должна гарантированно логироваться?

ti1
() автор топика
Ответ на: комментарий от ti1

В апачевские error-логи еще загляни.
В принципе, вывод диагностики может быть отключен в самом PHP-коде или в файлах .htaccess. Просто напиши тестовый php-скрипт с какой-нибудь ошибкой, вызови его и посмотри, будет ли вывод в error_log.

vinvlad ★★
()
Ответ на: комментарий от ti1

... насколько я помню, mod_php (который в Apache) всю диагностику по умолчанию в апачевский error_log отправляет. Аналогично, php-fpm тоже свой stderr возвращает по fastcgi-протоколу веб-серверу. Никогда не приходилось специально настраивать error_log в php.ini - это скорее для cli и cgi режимов выполнения.

vinvlad ★★
()
Ответ на: комментарий от vinvlad

Сделал тестовый файл testim.php:

<?php
 
throw new Exception('Test error log');
 
?>

и он таки записал лог, куда я хотел:

[06-Mar-2019 09:31:09 Europe/Helsinki] PHP Fatal error: Uncaught Exception: Test error log in /srv/www/***.org/httpdocs/testim.php:3
Stack trace:
#0 {main}
thrown in /srv/www/***.org/httpdocs/testim.php on line 3

Перед этим я изменил php.ini:

error_reporting = E_ALL

Теперь phpinfo() выдаёт:

error_reporting 32767 32767

Получается, что вывод ошибок PHP все-таки настроен, но несколько сайтов, работающих на сервере, с общей посещаемостью в несколько сотен уников в день, не генерируют ошибки PHP за эти несколько дней, что прошло с момента обновления софта на сервере?

ti1
() автор топика
Ответ на: комментарий от ti1

[оффтоп] Вот оно истинное лицо сайто клепания, сайт на пыхе, не вызывает ошибку? Значит что-то не так с системой логирования ошибок, но никак не с самим сайтом :)

anc ★★★★★
()
Ответ на: комментарий от ti1

Получается, что вывод ошибок PHP все-таки настроен, но несколько сайтов, работающих на сервере, с общей посещаемостью в несколько сотен уников в день, не генерируют ошибки PHP за эти несколько дней, что прошло с момента обновления софта на сервере?

Как я уже сказал раньше, вывод диагностики в PHP настраивается не только в php.ini, но и в других местах: в .htaccess файлах, прям в конфигурации виртуального apache-хоста, ну и в самом коде.

В production-версии PHP-кода и .htaccess-файлов подробная диагностика может быть отключена (обычно отключают всякие warning-и).

То, что перестали работать некоторые сайты - это, скорее всего, результат перехода на PHP 7.2, ну т.е. это чисто ваш «косяк». Такие вещи без согласования с владельцами сайтов не делаются. Дело в том, что в версии 7.2 кое-что изменилось в поведении некоторых php-функций - то, что раньше прокатывало без замечаний, теперь может вызвать какие-то непредусмотренные эффекты.

vinvlad ★★
()
Ответ на: комментарий от ti1

... кроме того, при upgrade-е у вас, поди, поменялась версия не только PHP но и СУБД-шек (MySQL и пр.), что также могло вызвать проблемы. В соответствующие логи тоже загляните.

vinvlad ★★
()
Ответ на: комментарий от vinvlad

Проблему решил. Она оказалась в MySQL, а точнее - в обновлении MySQL, начиная с версий 5.7.*...

Из того, что было доступным на stackoverflow.com и помогло мне - пришлось в файл /etc/my.cnf дописывать следующее:

Код

[mysqld]
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

После чего перегрузить MySQL на сервере.

Тему можно закрывать, надеюсь, она поможет тем, у кого подобный VPS на Убунту. Тем более, что вывод логов ПХП я таки настроил.

ti1
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.