- Added secure .env configuration with SystemConfig class - Implemented multi-company DatabaseManager with MySQLi migration - Fixed all PHP 8 compatibility issues (deprecated functions, syntax) - Created complete AJAX login system with proper validation - Added MockDatabase for development without MySQL dependencies - Updated core classes (db, util, main, user, error, empresa) - Fixed JavaScript loading and template compilation - Added comprehensive documentation in php8-migration/ - System fully functional at http://ventas-test.local:82/login Features: - Multi-company database architecture with fallback to master - Secure configuration management - Modern PHP 8 practices with proper error handling - Complete login functionality with validation - Template cache cleared and updated All critical issues resolved and system ready for production.
109 lines
3.8 KiB
Markdown
Executable File
109 lines
3.8 KiB
Markdown
Executable File
# 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** |