# Reporte Detallado de Problemas de Compatibilidad con PHP 8 ## Resumen Ejecutivo El sistema actual **NO es compatible con PHP 8** debido a múltiples problemas críticos que requieren actualización inmediata. ## Problemas Críticos Identificados ### 1. Funciones MySQL Obsoletas (Nivel CRÍTICO) **Archivo:** `classes/db.class.php` - **Líneas afectadas:** 87, 88, 103, 107, 117, 133, 147, 154, 165, 178, 189, 203, 212 - **Funciones a reemplazar:** - `mysql_connect()` → `mysqli_connect()` o `PDO::__construct()` - `mysql_select_db()` → `mysqli_select_db()` o parte de PDO DSN - `mysql_query()` → `mysqli_query()` o `PDO::query()` - `mysql_fetch_assoc()` → `mysqli_fetch_assoc()` o `PDO::fetch()` - `mysql_num_rows()` → `mysqli_num_rows()` o método PDO equivalente - `mysql_result()` → `mysqli_data_seek()` + `mysqli_fetch_row()` - `mysql_insert_id()` → `mysqli_insert_id()` o `PDO::lastInsertId()` - `mysql_affected_rows()` → `mysqli_affected_rows()` - `mysql_free_result()` → `mysqli_free_result()` - `mysql_fetch_array()` → `mysqli_fetch_array()` ### 2. Funciones Eliminadas en PHP 8 (Nivel ALTO) #### ereg_replace() **Archivo:** `classes/util.class.php:575` - **Reemplazo:** `preg_replace('/patron/', 'reemplazo', $string)` #### each() function **Archivos afectados (7 total):** - `pdf/include/style.cls.php:790` - `pdf/fpdf.php:1565` - `pdf/fpdi.php:435` - `classes/class.phpmailer.php:1645` - `classes/class.smtp.php:388,417` - `classes/comprobante.class.php:1465` - **Reemplazo:** Estructuras `foreach` o `reset() + key() + current()` #### create_function() **Archivos afectados (4 total):** - `pdf/include/frame_reflower.cls.php:233` - `pdf/include/text_frame_reflower.cls.php:380,388,416` - **Reemplazo:** Funciones anónimas o closures #### split() function **Archivos afectados:** - `pdf/domdf.php:227` - `classes/comprobante.class.php:350` - `ajax/evaluar-pedidos.php:160,360` - `ajax/cuentas-pagar.php:18` - **Reemplazo:** `explode()` (para separadores simples) o `preg_split()` (para expresiones regulares) ### 3. Sintaxis Incompatible (Nivel MEDIO) #### Llaves para acceso a strings/arrays **Patrón:** `$string{index}` → `$string[index]` **Archivos con más incidencias:** - `tcpdf/barcodes.php` (50+ ocurrencias) - `classes/json.class.php` (20+ ocurrencias) - Múltiples archivos en tcpdf/, pdf/, libs/ #### Asignaciones list() con elementos vacíos **Ejemplos problemáticos:** ```php // Incompatible list($x1,,$x2) = $array; list(,$y2,,,,$y1) = $array; // Compatible list($x1, $_, $x2) = $array; list($_, $y2, $_, $_, $_, $y1) = $array; // O mejor aún: usar array_slice() o destructuring moderno ``` ## Plan de Acción Priorizado ### Fase 1: Urgente (Funciones MySQL) 1. **Crear nueva clase de base de datos compatible con mysqli/PDO** 2. **Actualizar todas las llamadas a funciones mysql_*** 3. **Probar exhaustivamente la conexión y consultas** ### Fase 2: Funciones Eliminadas 1. **Reemplazar ereg_replace() → preg_replace()** 2. **Convertir each() → foreach()** 3. **Actualizar create_function() → funciones anónimas** 4. **Cambiar split() → explode() / preg_split()** ### Fase 3: Sintaxis 1. **Actualizar sintaxis de llaves** 2. **Corregir asignaciones list()** 3. **Revisar asignaciones por referencia** ## Estimación de Tiempo - **Fase 1 (MySQL):** 20-30 horas - **Fase 2 (Funciones):** 15-20 horas - **Fase 3 (Sintaxis):** 10-15 horas - **Pruebas:** 15-20 horas - **Total:** 60-85 horas ## Riesgos - **Alto:** Corrupción de datos durante migración MySQL - **Medio:** Pérdida de funcionalidad en reportes PDF - **Bajo:** Problemas de rendimiento temporales ## Recomendaciones 1. **NO migrar sin actualizar completamente** 2. **Crear entorno de prueba aislado** 3. **Backup completo antes de cambios** 4. **Migración incremental por módulos**