🔍 DIAGNÓSTICO PHP AVANZADO

Sistema CAFESCOR - Análisis de Compatibilidad PHP

🐘 Información del Sistema PHP

Versión 7.0.33
SAPI fpm-fcgi
Zend Engine 3.0.0
OS Linux

📊 Estadísticas del Diagnóstico

10
Funciones Verificadas
10
Extensiones Verificadas
3
Archivos con Problemas
4
Recomendaciones

⚙️ Compatibilidad de Funciones PHP

array_column

Descripción: Extraer columna de array multidimensional

Versión mínima: 5.5.0

Estado: ✅ Disponible y compatible

array_replace

Descripción: Reemplazar elementos de array

Versión mínima: 5.3.0

Estado: ✅ Disponible y compatible

password_hash

Descripción: Hash seguro de contraseñas

Versión mínima: 5.5.0

Estado: ✅ Disponible y compatible

password_verify

Descripción: Verificar hash de contraseña

Versión mínima: 5.5.0

Estado: ✅ Disponible y compatible

random_bytes

Descripción: Bytes aleatorios criptográficamente seguros

Versión mínima: 7.0.0

Estado: ✅ Disponible y compatible

random_int

Descripción: Entero aleatorio criptográficamente seguro

Versión mínima: 7.0.0

Estado: ✅ Disponible y compatible

hash_equals

Descripción: Comparación segura de hashes

Versión mínima: 5.6.0

Estado: ✅ Disponible y compatible

curl_multi_handle

Descripción: Manejo de múltiples conexiones cURL

Versión mínima: 5.5.0

Estado: ❌ No disponible

json_last_error_msg

Descripción: Mensaje del último error JSON

Versión mínima: 5.5.0

Estado: ✅ Disponible y compatible

class_alias

Descripción: Crear alias de clase

Versión mínima: 5.3.0

Estado: ✅ Disponible y compatible

🔧 Extensiones PHP

mysqli

Descripción: Conexión MySQL mejorada

Alternativas: pdo_mysql, mysql

Crítica:

Estado: ✅ Cargada

pdo_mysql

Descripción: PDO para MySQL

Alternativas: mysqli, mysql

Crítica:

Estado: ✅ Cargada

json

Descripción: Manejo de JSON

Alternativas: simplexml, dom

Crítica:

Estado: ✅ Cargada

mbstring

Descripción: Manejo de strings multibyte

Alternativas: iconv, recode

Crítica:

Estado: ✅ Cargada

openssl

Descripción: Criptografía y SSL

Alternativas: mcrypt, hash

Crítica:

Estado: ✅ Cargada

curl

Descripción: Transferencia de archivos

Alternativas: file_get_contents, fopen, sockets

Crítica: No

Estado: ✅ Cargada

gd

Descripción: Manejo de imágenes

Alternativas: imagick, gmagick

Crítica: No

Estado: ✅ Cargada

zip

Descripción: Compresión ZIP

Alternativas: phar, rar

Alternativas Disponibles: phar

Crítica: No

Estado: ⚠️ No cargada (no crítica)

🔄 Código Alternativo Disponible

Usando Phar en lugar de Zip

<?php
// En lugar de ZipArchive
$phar = new PharData("archivo.tar");
$phar->extractTo("./destino/");

// Para crear archivos comprimidos
$phar = new PharData("archivo.tar");
$phar->addFromString("archivo.txt", "contenido");

// Para listar contenido
foreach ($phar as $archivo) {
    echo $archivo->getFilename() . "\n";
}
⚠️ Advertencia: Phar solo soporta TAR, no ZIP directamente

xml

Descripción: Manejo de XML

Alternativas: simplexml, dom

Crítica: No

Estado: ✅ Cargada

intl

Descripción: Internacionalización

Alternativas: mbstring, iconv

Alternativas Disponibles: mbstring, iconv

Crítica: No

Estado: ⚠️ No cargada (no crítica)

🚨 Problemas de Código Detectados

💡 Sistema Inteligente: Este detector ahora es más preciso y solo muestra problemas reales. Funciones modernas como foreach no se marcan como obsoletas, y las variables de bucles se detectan correctamente.

📄 panelAdmin.php

Tipo: Sintaxis

Problema: Short tags <?= pueden no estar habilitados en el servidor

Severidad: MEDIA

📍 Ubicaciones específicas:
📄 Archivo: panelAdmin.php 📍 Línea: 465
Código actual:
<p><?= escaparHTML($totalNoticias) ?></p>
📄 Archivo: panelAdmin.php 📍 Línea: 472
Código actual:
<p><?= escaparHTML($totalDetalles) ?></p>
📄 Archivo: panelAdmin.php 📍 Línea: 479
Código actual:
<p><?= escaparHTML($totalCategorias) ?></p>
📄 Archivo: panelAdmin.php 📍 Línea: 489
Código actual:
<p><?= escaparHTML($totalIconos) ?></p>
📄 Archivo: panelAdmin.php 📍 Línea: 500
Código actual:
<strong>Error de BD:</strong> <?= escaparHTML($dbError) ?>
📄 Archivo: panelAdmin.php 📍 Línea: 507
Código actual:
<strong>¡Éxito!</strong> <?= escaparHTML($success) ?>
📄 Archivo: panelAdmin.php 📍 Línea: 514
Código actual:
<strong>Error:</strong> <?= escaparHTML($error) ?>

📄 administracionNoticias.php

Tipo: Sintaxis

Problema: Short tags <?= pueden no estar habilitados en el servidor

Severidad: MEDIA

📍 Ubicaciones específicas:
📄 Archivo: administracionNoticias.php 📍 Línea: 496
Código actual:
<p class="text-2xl font-bold"><?= escaparHTML($totalNoticias) ?></p>
📄 Archivo: administracionNoticias.php 📍 Línea: 507
Código actual:
<p class="text-2xl font-bold"><?= escaparHTML($totalDetalles) ?></p>
📄 Archivo: administracionNoticias.php 📍 Línea: 528
Código actual:
<strong>Error de BD:</strong> <?= escaparHTML($dbError) ?>
📄 Archivo: administracionNoticias.php 📍 Línea: 537
Código actual:
<?php if ($idCreated): ?>(ID #<?= escaparHTML($idCreated) ?>)<?php endif; ?>.
📄 Archivo: administracionNoticias.php 📍 Línea: 542
Código actual:
<?= escaparHTML($countParam) ?> bloques de contenido.
📄 Archivo: administracionNoticias.php 📍 Línea: 555
Código actual:
<?= escaparHTML($detallesParam ?: '0') ?> detalles asociados.
📄 Archivo: administracionNoticias.php 📍 Línea: 560
Código actual:
<?= escaparHTML($detallesParam ?: '0') ?> detalles han sido movidos a la papelera.
📄 Archivo: administracionNoticias.php 📍 Línea: 571
Código actual:
<i class="fas fa-check-circle mr-2"></i><strong>¡Éxito!</strong> <?= escaparHTML($mensaje) ?>
📄 Archivo: administracionNoticias.php 📍 Línea: 607
Código actual:
<i class="fas fa-check-circle mr-2"></i><strong>¡Éxito!</strong> <?= escaparHTML($mensaje) ?>
📄 Archivo: administracionNoticias.php 📍 Línea: 614
Código actual:
<i class="fas fa-exclamation-triangle mr-2"></i><strong>Error:</strong> <?= escaparHTML($error) ?>
📄 Archivo: administracionNoticias.php 📍 Línea: 673
Código actual:
placeholder="ID o parte del título" value="<?= escaparHTML($q ?: '') ?>">
📄 Archivo: administracionNoticias.php 📍 Línea: 682
Código actual:
<option value="1" <?= $filtroEstado === '1' ? 'selected' : '' ?>>Solo activas</option>
📄 Archivo: administracionNoticias.php 📍 Línea: 683
Código actual:
<option value="0" <?= $filtroEstado === '0' ? 'selected' : '' ?>>Solo inactivas
📄 Archivo: administracionNoticias.php 📍 Línea: 694
Código actual:
<option value="hoy" <?= $filtroFecha === 'hoy' ? 'selected' : '' ?>>Hoy</option>
📄 Archivo: administracionNoticias.php 📍 Línea: 695
Código actual:
<option value="semana" <?= $filtroFecha === 'semana' ? 'selected' : '' ?>>Esta semana
📄 Archivo: administracionNoticias.php 📍 Línea: 697
Código actual:
<option value="mes" <?= $filtroFecha === 'mes' ? 'selected' : '' ?>>Este mes</option>
📄 Archivo: administracionNoticias.php 📍 Línea: 698
Código actual:
<option value="anio" <?= $filtroFecha === 'anio' ? 'selected' : '' ?>>Este año</option>
📄 Archivo: administracionNoticias.php 📍 Línea: 730
Código actual:
<span class="ml-2 px-2 py-1 bg-blue-100 rounded">Búsqueda: <?= escaparHTML($q) ?></span>
📄 Archivo: administracionNoticias.php 📍 Línea: 734
Código actual:
<?= escaparHTML($estadoTexto) ?></span>
📄 Archivo: administracionNoticias.php 📍 Línea: 738
Código actual:
<?= escaparHTML($fechaTexto) ?></span>
📄 Archivo: administracionNoticias.php 📍 Línea: 804
Código actual:
<strong><?= escaparHTML($totalResultados) ?></strong>
📄 Archivo: administracionNoticias.php 📍 Línea: 805
Código actual:
noticia<?= $totalResultados != 1 ? 's' : '' ?>
📄 Archivo: administracionNoticias.php 📍 Línea: 806
Código actual:
encontrada<?= $totalResultados != 1 ? 's' : '' ?>
📄 Archivo: administracionNoticias.php 📍 Línea: 895
Código actual:
#<?= escaparHTML($idN) ?></td>
📄 Archivo: administracionNoticias.php 📍 Línea: 897
Código actual:
<div class="text-sm font-bold text-gray-900"><?= escaparHTML($tituloN) ?></div>
📄 Archivo: administracionNoticias.php 📍 Línea: 899
Código actual:
<?= escaparHTML(preview($descripcionN, 50)) ?>
📄 Archivo: administracionNoticias.php 📍 Línea: 903
Código actual:
<i class="fas fa-calendar mr-2"></i><?= escaparHTML($fechaN) ?>
📄 Archivo: administracionNoticias.php 📍 Línea: 906
Código actual:
<span class="badge <?= escaparHTML($categoriaColor) ?>">
📄 Archivo: administracionNoticias.php 📍 Línea: 908
Código actual:
class="<?= escaparHTML($categoriaIcon) ?> mr-1"></i><?= escaparHTML($categoriaNombre) ?>
📄 Archivo: administracionNoticias.php 📍 Línea: 912
Código actual:
<i class="fas fa-eye mr-2"></i><?= escaparHTML($vistasN) ?>
📄 Archivo: administracionNoticias.php 📍 Línea: 923
Código actual:
<a href="editarNoticia.php?id=<?= $idN ?>" class="btn btn-primary btn-sm"
📄 Archivo: administracionNoticias.php 📍 Línea: 927
Código actual:
<a href="editarNoticiaCompleta.php?id=<?= $idN ?>"
📄 Archivo: administracionNoticias.php 📍 Línea: 931
Código actual:
<a href="administracionNoticias.php?tab=detalles&filtroNoticia=<?= $idN ?>"
📄 Archivo: administracionNoticias.php 📍 Línea: 935
Código actual:
<a href="eliminarNoticia.php?id=<?= $idN ?>&tab=noticias"
📄 Archivo: administracionNoticias.php 📍 Línea: 937
Código actual:
onclick="return confirm('¿Eliminar la noticia #<?= $idN ?>?')"
📄 Archivo: administracionNoticias.php 📍 Línea: 941
Código actual:
<a href="cambiarEstadoNoticia.php?id=<?= $idN ?>&tab=noticias"
📄 Archivo: administracionNoticias.php 📍 Línea: 942
Código actual:
class="btn <?= $activoN ? 'btn-toggle-active' : 'btn-toggle-inactive' ?> btn-sm"
📄 Archivo: administracionNoticias.php 📍 Línea: 943
Código actual:
title="<?= $activoN ? 'Desactivar' : 'Activar' ?>">
📄 Archivo: administracionNoticias.php 📍 Línea: 944
Código actual:
<i class="fas <?= $activoN ? 'fa-toggle-on' : 'fa-toggle-off' ?>"></i>
📄 Archivo: administracionNoticias.php 📍 Línea: 983
Código actual:
Error listando noticias: <?= escaparHTML($e->getMessage()) ?>
📄 Archivo: administracionNoticias.php 📍 Línea: 1016
Código actual:
<a href="crearDetalle.php?noticia_id=<?= $filtroId ?>&ret=<?= $ret ?>" class="btn btn-success">
📄 Archivo: administracionNoticias.php 📍 Línea: 1017
Código actual:
<i class="fas fa-plus mr-2"></i>Agregar Detalle a #<?= $filtroId ?>
📄 Archivo: administracionNoticias.php 📍 Línea: 1051
Código actual:
<option value="<?= $idOpt ?>" <?= $sel ?>>#<?= $idOpt ?> -
📄 Archivo: administracionNoticias.php 📍 Línea: 1052
Código actual:
<?= escaparHTML($titOpt) ?>
📄 Archivo: administracionNoticias.php 📍 Línea: 1071
Código actual:
placeholder="Ej. 1" value="<?= escaparHTML($filtroOrdenParam ?: '') ?>">
📄 Archivo: administracionNoticias.php 📍 Línea: 1147
Código actual:
<h4>Noticia #<?= $noticiaId ?></h4>
📄 Archivo: administracionNoticias.php 📍 Línea: 1148
Código actual:
<p><?= escaparHTML($tituloNoticia ?: 'Sin título') ?></p>
📄 Archivo: administracionNoticias.php 📍 Línea: 1152
Código actual:
<a href="editardetallecompleto.php?id=<?= $noticiaId ?>&ret=<?= $ret ?>"
📄 Archivo: administracionNoticias.php 📍 Línea: 1156
Código actual:
<a href="eliminarDetallesNoticia.php?noticia_id=<?= $noticiaId ?>&tab=detalles<?= ($filtroId ? ("&filtroNoticia=" . $filtroId) : ("&filtroNoticia=" . $noticiaId)) ?><?= ($filtroOrdenParam && strlen($filtroOrdenParam) > 0 ? ("&filtroOrden=" . escaparHTML($filtroOrdenParam)) : "") ?>"
📄 Archivo: administracionNoticias.php 📍 Línea: 1158
Código actual:
onclick="return confirm('¿Eliminar TODOS los detalles de la noticia #<?= $noticiaId ?> sin eliminar la noticia resumida?')"
📄 Archivo: administracionNoticias.php 📍 Línea: 1189
Código actual:
class="<?=
📄 Archivo: administracionNoticias.php 📍 Línea: 1193
Código actual:
<?= strtoupper(str_replace("_", " ", $tipoD)) ?>
📄 Archivo: administracionNoticias.php 📍 Línea: 1195
Código actual:
<span class="id-detalle">#<?= $detalleId ?></span>
📄 Archivo: administracionNoticias.php 📍 Línea: 1198
Código actual:
class="<?= ($tipoD === "titulo_principal" || $tipoD === "titulo_secundario") ? "contenido-titulo" : "contenido-texto" ?>">
📄 Archivo: administracionNoticias.php 📍 Línea: 1199
Código actual:
<?= escaparHTML(preview($contenido, 100)) ?>
📄 Archivo: administracionNoticias.php 📍 Línea: 1205
Código actual:
Orden: <?= (int) $orden ?>
📄 Archivo: administracionNoticias.php 📍 Línea: 1210
Código actual:
class="<?= escaparHTML($catIcon) ?> <?= escaparHTML($catColor) ?>"></i>
📄 Archivo: administracionNoticias.php 📍 Línea: 1211
Código actual:
<?= escaparHTML($categoriaD) ?>
📄 Archivo: administracionNoticias.php 📍 Línea: 1217
Código actual:
<a href="editarDetalle.php?id=<?= $detalleId ?>&ret=<?= $ret ?>"
📄 Archivo: administracionNoticias.php 📍 Línea: 1221
Código actual:
<a href="eliminarDetalle.php?id=<?= $detalleId ?>&tab=detalles<?= ($filtroId ? ("&filtroNoticia=" . $filtroId) : "") ?><?= ($filtroOrdenParam && strlen($filtroOrdenParam) > 0 ? ("&filtroOrden=" . escaparHTML($filtroOrdenParam)) : "") ?>"
📄 Archivo: administracionNoticias.php 📍 Línea: 1223
Código actual:
onclick="return confirm('¿Eliminar el detalle #<?= $detalleId ?>?')"
📄 Archivo: administracionNoticias.php 📍 Línea: 1244
Código actual:
<?= ($filtroId ? "No se encontraron detalles para la noticia seleccionada." : "No hay detalles de noticias registrados en el sistema.") ?>
📄 Archivo: administracionNoticias.php 📍 Línea: 1256
Código actual:
Error listando detalles: <?= escaparHTML($e->getMessage()) ?>
📄 Archivo: administracionNoticias.php 📍 Línea: 1269
Código actual:
<?= ($filtroId ? "No se encontraron detalles para la noticia seleccionada." : "No hay detalles de noticias registrados en el sistema.") ?>

📄 gestionarUsuarios.php

Tipo: Sintaxis

Problema: Short tags <?= pueden no estar habilitados en el servidor

Severidad: MEDIA

📍 Ubicaciones específicas:
📄 Archivo: gestionarUsuarios.php 📍 Línea: 116
Código actual:
<span class="ml-2">El administrador <strong><?= escaparHTML($username ?: '') ?></strong> ha sido
📄 Archivo: gestionarUsuarios.php 📍 Línea: 125
Código actual:
<span class="ml-2">El administrador <strong><?= escaparHTML($username ?: '') ?></strong> ha sido
📄 Archivo: gestionarUsuarios.php 📍 Línea: 134
Código actual:
<span class="ml-2">El administrador <strong><?= escaparHTML($username ?: '') ?></strong> ha sido
📄 Archivo: gestionarUsuarios.php 📍 Línea: 135
Código actual:
<strong><?= escaparHTML($status ?: '') ?></strong> exitosamente.</span>
📄 Archivo: gestionarUsuarios.php 📍 Línea: 197
Código actual:
<i class="fas fa-<?= $errorIcon ?> mr-2 text-red-500"></i>
📄 Archivo: gestionarUsuarios.php 📍 Línea: 199
Código actual:
<span class="ml-2"><?= escaparHTML($errorMessage) ?></span>
📄 Archivo: gestionarUsuarios.php 📍 Línea: 279
Código actual:
<?= escaparHTML($userUsername) ?>
📄 Archivo: gestionarUsuarios.php 📍 Línea: 282
Código actual:
<div class="text-xs text-gray-500"><?= escaparHTML($nombreCompleto) ?></div>
📄 Archivo: gestionarUsuarios.php 📍 Línea: 311
Código actual:
<?= escaparHTML(trim($permiso)) ?>
📄 Archivo: gestionarUsuarios.php 📍 Línea: 322
Código actual:
class="fas fa-envelope mr-1 text-gray-400"></i><?= escaparHTML($email) ?>
📄 Archivo: gestionarUsuarios.php 📍 Línea: 327
Código actual:
class="fas fa-phone mr-1 text-gray-400"></i><?= escaparHTML($telefono) ?>
📄 Archivo: gestionarUsuarios.php 📍 Línea: 353
Código actual:
<input type="hidden" name="userId" value="<?= $id ?>">
📄 Archivo: gestionarUsuarios.php 📍 Línea: 354
Código actual:
<input type="hidden" name="nuevoEstado" value="<?= !$activo ? "1" : "0" ?>">
📄 Archivo: gestionarUsuarios.php 📍 Línea: 366
Código actual:
class="<?= $buttonClass ?> px-2 py-1 rounded transition duration-300"
📄 Archivo: gestionarUsuarios.php 📍 Línea: 367
Código actual:
onclick="return confirm('Estas seguro de que deseas <?= $confirmText ?> al administrador <?= escaparHTML($userUsername) ?>?')">
📄 Archivo: gestionarUsuarios.php 📍 Línea: 368
Código actual:
<i class="fas <?= $iconClass ?> mr-1"></i>
📄 Archivo: gestionarUsuarios.php 📍 Línea: 369
Código actual:
<?= $buttonText ?>
📄 Archivo: gestionarUsuarios.php 📍 Línea: 373
Código actual:
<a href="editarUsuario.php?id=<?= $id ?>"
📄 Archivo: gestionarUsuarios.php 📍 Línea: 377
Código actual:
<a href="eliminarUsuario.php?id=<?= $id ?>"
📄 Archivo: gestionarUsuarios.php 📍 Línea: 409
Código actual:
Error al cargar usuarios: <?= escaparHTML($e->getMessage()) ?>
📄 Archivo: gestionarUsuarios.php 📍 Línea: 462
Código actual:
<img src="<?= escaparHTML($rutaImagenModal) ?>" alt="Foto Actual"

💡 Recomendaciones de Mejora

Compatibilidad

Actualizar PHP para curl_multi_handle

La función curl_multi_handle requiere PHP 5.5.0+

Solución: Actualizar a PHP 5.5.0 o superior

Sugerencia

Alternativa para zip

Puedes usar phar en lugar de zip

Solución: Considerar usar las extensiones disponibles: phar

Sugerencia

Alternativa para intl

Puedes usar mbstring, iconv en lugar de intl

Solución: Considerar usar las extensiones disponibles: mbstring, iconv

Código

Refactorizar código obsoleto

Reemplazar funciones y sintaxis obsoletas

Solución: Usar funciones modernas equivalentes