Files
ventas_php/php8-migration/reporte-problemas.md
nickpons666 aaa77e870e Complete PHP 8.3.6 migration with modern architecture
- 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.
2026-01-06 22:52:04 -06:00

3.8 KiB
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:

// 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