true, 'diagnostico' => 'Análisis completado', 'timestamp' => date('Y-m-d H:i:s'), 'checks' => [ 'sesion' => isset($_SESSION['usuario_id']), 'usuario_id' => $_SESSION['usuario_id'] ?? null, 'tipo_usuario' => $_SESSION['tipo_usuario'] ?? null, 'metodo_post' => $_SERVER['REQUEST_METHOD'] === 'POST', 'archivo_recibido' => isset($_FILES['archivo']), 'archivo_nombre' => $_FILES['archivo']['name'] ?? null, 'archivo_error' => $_FILES['archivo']['error'] ?? null, 'conexion_db' => $conn !== false, 'directorio_temp_existe' => is_dir($temp_dir), 'directorio_temp_escribible' => is_writable($temp_dir) ], 'errores_potenciales' => [] ]; // Detectar problemas if (!isset($_SESSION['usuario_id'])) { $respuesta['errores_potenciales'][] = "No hay usuario_id en sesión"; } if ($_SERVER['REQUEST_METHOD'] !== 'POST') { $respuesta['errores_potenciales'][] = "Método no es POST"; } if (!isset($_FILES['archivo'])) { $respuesta['errores_potenciales'][] = "No se recibió archivo"; } elseif ($_FILES['archivo']['error'] !== UPLOAD_ERR_OK) { $respuesta['errores_potenciales'][] = "Error en upload: " . $_FILES['archivo']['error']; } if (!$conn) { $respuesta['errores_potenciales'][] = "Error de conexión a base de datos"; } if (!is_dir($temp_dir)) { $respuesta['errores_potenciales'][] = "Directorio temporal no existe"; } elseif (!is_writable($temp_dir)) { $respuesta['errores_potenciales'][] = "Directorio temporal no tiene permisos de escritura"; } // Si no hay errores potenciales, intentar procesar if (empty($respuesta['errores_potenciales']) && isset($_FILES['archivo'])) { logDebug("Intentando procesar archivo..."); // Mover archivo temporal $archivo_temporal = $temp_dir . 'test_' . time() . '_' . $_FILES['archivo']['name']; if (move_uploaded_file($_FILES['archivo']['tmp_name'], $archivo_temporal)) { $respuesta['archivo_procesado'] = true; $respuesta['archivo_temporal'] = $archivo_temporal; // Leer primeras líneas $contenido = file_get_contents($archivo_temporal); if ($contenido !== false) { $lineas = explode("\n", array_slice(explode("\n", $contenido), 0, 5)); $respuesta['primeras_lineas'] = $lineas; $respuesta['total_lineas'] = count(explode("\n", $contenido)); } // Limpiar archivo unlink($archivo_temporal); } else { $respuesta['errores_potenciales'][] = "No se pudo mover archivo temporal"; } } logDebug("Respuesta: " . json_encode($respuesta)); echo json_encode($respuesta, JSON_PRETTY_PRINT); } catch (Exception $e) { logDebug("EXCEPCIÓN: " . $e->getMessage()); logDebug("Stack trace: " . $e->getTraceAsString()); http_response_code(500); echo json_encode([ 'success' => false, 'error' => $e->getMessage(), 'trace' => $e->getTraceAsString() ], JSON_PRETTY_PRINT); } ?>