Files
crm.clientright.ru/debug_server_logging.php

127 lines
4.9 KiB
PHP
Raw Permalink Normal View History

<?php
/**
* Серверное логирование для отладки загрузки файлов
* Добавляет детальные логи в debug_upload_server.log
*/
class UploadDebugLogger {
private static $logFile = '/var/www/fastuser/data/www/crm.clientright.ru/logs/debug_upload_server.log';
public static function log($message, $data = null) {
$timestamp = date('Y-m-d H:i:s');
$logEntry = "[$timestamp] $message";
if ($data !== null) {
$logEntry .= "\nData: " . print_r($data, true);
}
$logEntry .= "\n" . str_repeat('-', 80) . "\n";
file_put_contents(self::$logFile, $logEntry, FILE_APPEND | LOCK_EX);
}
public static function logRequest() {
self::log('=== NEW REQUEST ===', [
'REQUEST_URI' => $_SERVER['REQUEST_URI'] ?? 'not set',
'REQUEST_METHOD' => $_SERVER['REQUEST_METHOD'] ?? 'not set',
'CONTENT_TYPE' => $_SERVER['CONTENT_TYPE'] ?? 'not set',
'CONTENT_LENGTH' => $_SERVER['CONTENT_LENGTH'] ?? 'not set',
'HTTP_USER_AGENT' => $_SERVER['HTTP_USER_AGENT'] ?? 'not set',
'REMOTE_ADDR' => $_SERVER['REMOTE_ADDR'] ?? 'not set',
'QUERY_STRING' => $_SERVER['QUERY_STRING'] ?? 'not set'
]);
self::log('POST DATA', $_POST);
self::log('GET DATA', $_GET);
if (!empty($_FILES)) {
$filesInfo = [];
foreach ($_FILES as $key => $file) {
if (is_array($file['name'])) {
// Multiple files
for ($i = 0; $i < count($file['name']); $i++) {
$filesInfo[$key][$i] = [
'name' => $file['name'][$i],
'type' => $file['type'][$i],
'size' => $file['size'][$i],
'tmp_name' => $file['tmp_name'][$i],
'error' => $file['error'][$i],
'exists' => file_exists($file['tmp_name'][$i])
];
}
} else {
// Single file
$filesInfo[$key] = [
'name' => $file['name'],
'type' => $file['type'],
'size' => $file['size'],
'tmp_name' => $file['tmp_name'],
'error' => $file['error'],
'exists' => file_exists($file['tmp_name'])
];
}
}
self::log('FILES DATA', $filesInfo);
} else {
self::log('NO FILES IN REQUEST');
}
// Логируем PHP настройки
self::log('PHP UPLOAD SETTINGS', [
'upload_max_filesize' => ini_get('upload_max_filesize'),
'post_max_size' => ini_get('post_max_size'),
'max_file_uploads' => ini_get('max_file_uploads'),
'file_uploads' => ini_get('file_uploads') ? 'On' : 'Off',
'max_execution_time' => ini_get('max_execution_time'),
'memory_limit' => ini_get('memory_limit'),
'upload_tmp_dir' => ini_get('upload_tmp_dir') ?: sys_get_temp_dir()
]);
}
public static function logError($message, $context = []) {
self::log('ERROR: ' . $message, $context);
}
public static function logSuccess($message, $context = []) {
self::log('SUCCESS: ' . $message, $context);
}
public static function logStep($step, $data = null) {
self::log('STEP: ' . $step, $data);
}
}
// Автоматически логируем каждый запрос если это POST к index.php
if ($_SERVER['REQUEST_METHOD'] === 'POST' &&
(strpos($_SERVER['REQUEST_URI'], 'index.php') !== false ||
strpos($_SERVER['SCRIPT_NAME'], 'index.php') !== false)) {
UploadDebugLogger::logRequest();
}
// Перехватываем ошибки PHP
function uploadDebugErrorHandler($errno, $errstr, $errfile, $errline) {
if (strpos($errfile, 'Documents') !== false || strpos($errstr, 'upload') !== false) {
UploadDebugLogger::logError("PHP Error [$errno]: $errstr in $errfile:$errline");
}
return false; // Продолжаем стандартную обработку ошибок
}
function uploadDebugExceptionHandler($exception) {
UploadDebugLogger::logError("Uncaught Exception: " . $exception->getMessage(), [
'file' => $exception->getFile(),
'line' => $exception->getLine(),
'trace' => $exception->getTraceAsString()
]);
}
set_error_handler('uploadDebugErrorHandler');
set_exception_handler('uploadDebugExceptionHandler');
// Добавляем функцию для ручного логирования
function debugUploadLog($message, $data = null) {
UploadDebugLogger::log($message, $data);
}
?>