Где PHP хранит лог ошибок? (PHP 5, Apache, FastCGI, cPanel)
Где искать лог ошибок PHP в типичной конфигурации Apache + FastCGI + cPanel
Привет! Твоя проблема очень распространена среди начинающих. В конфигурации Apache + FastCGI + cPanel логи ошибок PHP могут храниться в нескольких местах, и важно знать, куда смотреть в первую очередь.
Вот основной список возможных местоположений лог-файлов:
- Лог ошибок PHP (глобальный): Обычно находится в
/var/log/php_error_logили/var/log/php5/error.log. На многих хостингах cPanel этот файл недоступен для чтения пользователю. - Лог ошибок Apache:
/var/log/apache2/error.logили/usr/local/apache/logs/error_log. В cPanel часто есть отдельный лог для каждого домена:/home/username/logs/domain.com.error.log. - Лог ошибок PHP для конкретного пользователя: В cPanel можно найти файл
error_logпрямо в корневой директории твоего сайта (например,/home/username/public_html/error_log). - Лог в директории скрипта: Если в твоем скрипте или в
.htaccessуказан конкретный путь для лога, он будет там.
Как найти лог через cPanel
Самый простой способ — войти в панель cPanel и найти раздел "Error Log" или "Apache Error Log". Там отображаются последние ошибки. Также можно зайти в "File Manager" и проверить корень сайта на наличие файла error_log.
Настройка логирования через .htaccess
Если ты хочешь гарантированно видеть ошибки в своем файле, добавь в .htaccess в корне сайта следующие строки:
# Включаем логирование ошибок PHP
php_flag log_errors on
php_value error_log /home/username/public_html/my_php_errors.log
# Показывать ошибки на экране (только для разработки!)
php_flag display_errors on
php_value error_reporting E_ALL
Проверка через сам PHP
Ты можешь создать временный скрипт, который покажет текущие настройки:
<?php
// Создай файл phpinfo.php в корне сайта
phpinfo();
?>
Открой его в браузере. Найди секцию "error_log" — там будет указан путь к файлу, куда PHP сейчас пишет ошибки. Также обрати внимание на директиву "error_log" в разделе "Core".
Решение для твоего конкретного случая
Скорее всего, на твоем хостинге cPanel настроено так, что лог ошибок PHP пишется в файл /home/username/logs/domain.com.error.log. Проверь эту директорию через File Manager. Также обязательно проверь корень сайта — файл error_log может быть скрыт (в cPanel включи опцию "Show Hidden Files").
Если ты не можешь найти лог, добавь в начало своего скрипта следующий код для принудительного логирования:
<?php
// Временное решение для отладки
ini_set('log_errors', 1);
ini_set('error_log', dirname(__FILE__) . '/my_debug.log');
error_reporting(E_ALL);
// Твой код
include 'config.php';
$result = mysqli_query($link, "SELECT * FROM userss");
if (!$result) {
error_log("MySQL Error: " . mysqli_error($link));
}
?>
После этого в той же папке, где лежит скрипт, появится файл my_debug.log с подробной информацией об ошибке.
И последнее: на боевом сервере никогда не оставляй display_errors = On — это угроза безопасности. Используй только логирование.
Альтернативный подход: использование функции error_log() для кастомного логирования
Если стандартные логи недоступны или ты хочешь более гибкого контроля, можно полностью отказаться от поиска системных логов и настроить собственное логирование прямо в коде.
Вот простой класс-логгер, который можно подключить в начало любого скрипта:
<?php
class SimpleLogger {
private $logFile;
public function __construct($filename = 'app_errors.log') {
$this->logFile = dirname(__FILE__) . '/' . $filename;
}
public function log($message, $level = 'ERROR') {
$date = date('Y-m-d H:i:s');
$logEntry = "[$date] [$level] $message" . PHP_EOL;
file_put_contents($this->logFile, $logEntry, FILE_APPEND | LOCK_EX);
}
}
// Использование
$logger = new SimpleLogger();
$logger->log("Попытка соединения с БД");
$result = mysqli_query($link, "SELECT * FROM userss");
if (!$result) {
$logger->log("Ошибка MySQL: " . mysqli_error($link));
echo "Произошла ошибка. Подробности в логе.";
}
?>
Этот подход гарантирует, что ты всегда будешь видеть ошибки, независимо от настроек сервера. Файл лога будет создан в той же папке, что и скрипт. Не забудь добавить файл app_errors.log в .gitignore и настроить права доступа (обычно 644 или 600).
Также рекомендую использовать готовые библиотеки логирования, такие как Monolog, если проект становится больше. Они умеют писать в файлы, базы данных, отправлять на email и даже в Slack.
Главное преимущество этого метода — полная независимость от конфигурации сервера и cPanel. Ты сам решаешь, куда и в каком формате сохранять ошибки.