127 lines
4.9 KiB
PHP
127 lines
4.9 KiB
PHP
|
|
<?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);
|
||
|
|
}
|
||
|
|
|
||
|
|
?>
|