diff --git a/ParseAndCreateEvent.php b/ParseAndCreateEvent.php index 7d74a046..ce32c9e2 100644 --- a/ParseAndCreateEvent.php +++ b/ParseAndCreateEvent.php @@ -21,7 +21,9 @@ function log_wrapper($level, $message) { } try { + $scriptStartTime = microtime(true); log_wrapper('INFO', '=== НАЧАЛО ОБРАБОТКИ ==='); + log_wrapper('DEBUG', "Память на старте: " . round(memory_get_usage() / 1024 / 1024, 2) . " МБ"); // Получаем параметры (из POST, GET или argv) $params = array_merge($_GET, $_POST); @@ -73,24 +75,50 @@ try { curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($parscourtParams)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); - curl_setopt($ch, CURLOPT_TIMEOUT, 60); + curl_setopt($ch, CURLOPT_TIMEOUT, 180); // Увеличен таймаут до 3 минут + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); // Таймаут на установку соединения curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Для production HTTPS + + log_wrapper('DEBUG', "Отправляем cURL запрос к parscourt.php..."); + $startTime = microtime(true); $output = curl_exec($ch); + $execTime = round(microtime(true) - $startTime, 2); + $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); + $curlError = curl_error($ch); + $curlErrno = curl_errno($ch); + $curlInfo = curl_getinfo($ch); + curl_close($ch); + log_wrapper('DEBUG', "cURL выполнен за {$execTime} сек, HTTP код: $httpCode"); + + if ($curlErrno !== 0) { + log_wrapper('ERROR', "cURL ошибка #{$curlErrno}: {$curlError}"); + log_wrapper('DEBUG', "cURL info: " . json_encode($curlInfo, JSON_UNESCAPED_UNICODE)); + throw new Exception("Ошибка cURL при вызове parscourt.php: [{$curlErrno}] {$curlError}"); + } + if ($httpCode !== 200) { + log_wrapper('ERROR', "Неожиданный HTTP код: $httpCode"); + log_wrapper('DEBUG', "Первые 500 символов ответа: " . substr($output, 0, 500)); throw new Exception("Ошибка вызова parscourt.php: HTTP $httpCode"); } + $outputSize = strlen($output); + log_wrapper('DEBUG', "Получен ответ от parscourt.php (размер: {$outputSize} байт)"); log_wrapper('DEBUG', "Ответ от parscourt.php: $output"); // Парсим JSON ответ $parscourtResponse = json_decode($output, true); if (json_last_error() !== JSON_ERROR_NONE) { - throw new Exception('Ошибка декодирования JSON от parscourt.php: ' . json_last_error_msg()); + $jsonError = json_last_error_msg(); + log_wrapper('ERROR', "Ошибка декодирования JSON: {$jsonError}"); + log_wrapper('DEBUG', "Первые 1000 символов проблемного ответа: " . substr($output, 0, 1000)); + throw new Exception('Ошибка декодирования JSON от parscourt.php: ' . $jsonError); } log_wrapper('DEBUG', "Распарсенный ответ: " . json_encode($parscourtResponse, JSON_UNESCAPED_UNICODE)); @@ -167,20 +195,41 @@ try { // Передаём данные через временный файл $tempFile = tempnam(sys_get_temp_dir(), 'event_data_'); file_put_contents($tempFile, $eventDataJson); + log_wrapper('DEBUG', "Временный файл создан: $tempFile"); + + log_wrapper('DEBUG', "Запускаем команду: cat $tempFile | $createEventCommand"); + $startTimeEvent = microtime(true); $createEventOutput = shell_exec('cat ' . escapeshellarg($tempFile) . ' | ' . $createEventCommand . ' 2>&1'); + $execTimeEvent = round(microtime(true) - $startTimeEvent, 2); + log_wrapper('DEBUG', "CreateCourtEvent_v2.php выполнен за {$execTimeEvent} сек"); + // Удаляем временный файл unlink($tempFile); + log_wrapper('DEBUG', "Временный файл удалён"); - log_wrapper('DEBUG', "Ответ от CreateCourtEvent_v2.php: $createEventOutput"); + log_wrapper('DEBUG', "Ответ от CreateCourtEvent_v2.php (длина: " . strlen($createEventOutput) . " байт): $createEventOutput"); // Фильтруем PHP Notice из ответа $cleanOutput = preg_replace('/^PHP Notice:.*$/m', '', $createEventOutput); + $cleanOutput = trim($cleanOutput); + + log_wrapper('DEBUG', "Очищенный ответ (длина: " . strlen($cleanOutput) . " байт)"); + $createEventResponse = json_decode($cleanOutput, true); - if (json_last_error() !== JSON_ERROR_NONE || empty($createEventResponse['success'])) { - throw new Exception('Ошибка создания события: ' . ($createEventResponse['error'] ?? 'Неизвестная ошибка')); + if (json_last_error() !== JSON_ERROR_NONE) { + $jsonError = json_last_error_msg(); + log_wrapper('ERROR', "Ошибка декодирования JSON от CreateCourtEvent_v2.php: {$jsonError}"); + log_wrapper('DEBUG', "Проблемный ответ: $cleanOutput"); + throw new Exception('Ошибка декодирования JSON от CreateCourtEvent_v2.php: ' . $jsonError); + } + + if (empty($createEventResponse['success'])) { + $errorMsg = $createEventResponse['error'] ?? 'Неизвестная ошибка'; + log_wrapper('ERROR', "CreateCourtEvent_v2.php вернул ошибку: $errorMsg"); + throw new Exception('Ошибка создания события: ' . $errorMsg); } log_wrapper('SUCCESS', "Событие создано: " . $createEventResponse['event_id']); @@ -197,7 +246,13 @@ try { 'project_id' => $projectId ]; - log_wrapper('SUCCESS', '=== ОБРАБОТКА ЗАВЕРШЕНА УСПЕШНО ==='); + $totalTime = round(microtime(true) - $scriptStartTime, 2); + $memoryUsed = round(memory_get_usage() / 1024 / 1024, 2); + $memoryPeak = round(memory_get_peak_usage() / 1024 / 1024, 2); + + log_wrapper('SUCCESS', "=== ОБРАБОТКА ЗАВЕРШЕНА УСПЕШНО ==="); + log_wrapper('INFO', "Общее время выполнения: {$totalTime} сек"); + log_wrapper('DEBUG', "Память использовано: {$memoryUsed} МБ (пик: {$memoryPeak} МБ)"); header('Content-Type: application/json; charset=utf-8'); echo json_encode($response, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); @@ -206,13 +261,23 @@ try { } catch (Exception $e) { $error_message = $e->getMessage(); - log_wrapper('ERROR', "Ошибка: $error_message"); - log_wrapper('ERROR', "Стек: " . $e->getTraceAsString()); + $totalTime = isset($scriptStartTime) ? round(microtime(true) - $scriptStartTime, 2) : 0; + $memoryUsed = round(memory_get_usage() / 1024 / 1024, 2); + + log_wrapper('ERROR', "=== ОШИБКА ОБРАБОТКИ ==="); + log_wrapper('ERROR', "Сообщение: $error_message"); + log_wrapper('ERROR', "Файл: " . $e->getFile() . " (строка " . $e->getLine() . ")"); + log_wrapper('ERROR', "Стек вызовов:"); + log_wrapper('ERROR', $e->getTraceAsString()); + log_wrapper('INFO', "Время до ошибки: {$totalTime} сек"); + log_wrapper('DEBUG', "Память использовано: {$memoryUsed} МБ"); + log_wrapper('ERROR', '=== КОНЕЦ ЛОГА ОШИБКИ ==='); $response = [ 'success' => false, 'error' => $error_message, - 'timestamp' => date('Y-m-d H:i:s') + 'timestamp' => date('Y-m-d H:i:s'), + 'execution_time' => $totalTime ]; header('Content-Type: application/json; charset=utf-8');