Resumen del proyecto
Este repositorio contiene una pequeña aplicación PHP con assets estáticos y scripts auxiliares.
Resumen
Este repositorio contiene una pequeña aplicación PHP + assets estáticos y un script auxiliar para gestionar un entorno LAMP. A continuación se describe la estructura, responsabilidad de cada archivo y las funciones/clases clave.
Estructura de archivos
lamp_manager.sh— Script Bash para instalar/configurar LAMP y gestionar virtual hosts.view.php— Generador de unindex.htmlcon vista del directorio y eliminación de archivos vía AJAX.- Archivos del subdirectorio
Archivos/:Archivos/index.php— Lista paginada de registros desde la tabladetalles.Archivos/registro.php— Formulario y lógica para insertar un nuevo registro en la tabladetalles.Archivos/Imagenes/Favicon/site.webmanifest— manifest para favicons.Archivos/Js/copytxt.js— JS para copiar texto al portapapeles.Archivos/Sql/detalles.sql— DDL de la tabladetalles.Archivos/Sql/leeme.txt— Instrucciones para importar la BD.Archivos/Styles/tema.css— Estilos CSS del listado.
Etiquetas/Html.php— ClaseHtmlusada desdeTests/index.php.Tests/index.php— Ejemplo de uso de la claseHtml.
Archivos clave — explicación y símbolos importantes
lamp_manager.sh
Archivo: lamp_manager.sh
Propósito: instalar Apache, MariaDB (MySQL), PHP; instalar VS Code; instalar phpMyAdmin; crear/listar/eliminar Virtual Hosts.
Funciones relevantes:
mensaje_estado()— imprime estado.mensaje_error()— imprime errores.pausar()— pausa en consola.instalar_lamp()— instala la pila LAMP.instalar_vscode()— instala VS Code.instalar_phpmyadmin()— instala phpMyAdmin.crear_virtualhost()— crea un vhost y la carpeta en/var/www.listar_virtualhosts()— lista vhosts.eliminar_virtualhost()— elimina un vhost.menu_principal()/menu_crud_vhost()— UI de menú en consola.
Nota: requiere privilegios sudo y adaptación para distribuciones distintas a Debian/Ubuntu.
view.php
Archivo: view.php
Propósito: generar index.html con una vista del directorio actual y manejar eliminación de archivos vía AJAX.
Síntesis:
- La lógica de eliminación se maneja al inicio mediante POST con
action=deleteyfilename. - Función principal:
generate_directory_view()— leescandir(), genera HTML con botones de eliminar y escribeindex.html. - Incluye cliente jQuery que llama a
view.phpvía AJAX para eliminar y recargar.
Notas de seguridad: usa basename() para sanitizar nombres y valida contra una lista de items ignorados; revisar permisos y rutas antes de usar en entornos públicos.
Archivos/registro.php
Archivo: Archivos/registro.php
Propósito: insertar un nuevo registro en la tabla detalles.
Elementos:
- Constantes de conexión:
DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_NAME. - Usa
mysqliy sentencias preparadas para insertar:INSERT INTO detalles (nombre, hash) VALUES (?, ?). - Actualmente recibe datos por
GET($_GET['nombre_archivo']) — recomendable cambiar aPOSTen producción.
Buenas prácticas: ya usa sentencias preparadas; mejorar validación y añadir protección CSRF si hay formularios públicos.
Archivos/index.php
Archivo: Archivos/index.php
Propósito: mostrar la lista paginada de nombres guardados en la tabla detalles.
Lógica:
- Parámetros de paginación:
$registros_por_pagina,$pagina_actual,$offset. - Cuenta total con
SELECT COUNT(*) AS total FROM detalles. - Consulta parametrizada con
LIMIT ? OFFSET ?usandoprepare/bind_param. - Genera paginación simple (número de página, "Retroceder" / "Avanzar").
Nota: sanitiza salida con htmlspecialchars().
Archivos/Sql/detalles.sql
Archivo: Archivos/Sql/detalles.sql
Contenido: definición de la tabla detalles con columnas: numero (PK, AUTO_INCREMENT), nombre (varchar(100)), hash (text).
Ver Archivos/Sql/leeme.txt para instrucciones de importación.
Archivos/Js/copytxt.js
Archivo: Archivos/Js/copytxt.js
Propósito: habilitar botón "copy txt" para copiar el contenido de #contenedor-texto.
Funciones: setupCopyToClipboard() y copyUsingExecCommand() (fallback).
Etiquetas/Html.php
Archivo: Etiquetas/Html.php
Propósito: clase sencilla para construir etiquetas y mostrar contenido.
Elementos clave: constantes SOLA, PAR, TEXTO; métodos crear() e imprimir() y utilidades internas modificar(), obtener().
Tests/index.php
Archivo: Tests/index.php
Propósito: ejemplo de uso de la clase Html y plantilla de página con favicons. Usa require_once "../Etiquetas/Html.php"; y luego $html = new Html; / $html->imprimir(...);
Archivos/Styles/tema.css
Archivo: Archivos/Styles/tema.css
Propósito: estilos para la lista y la paginación; contiene media queries para móvil y escritorio.
Flujo típico de uso
- Preparar base de datos: crear base
archivose importarArchivos/Sql/detalles.sql(verArchivos/Sql/leeme.txt). - Insertar registros: desde
Archivos/registro.php(formulario) se insertanombre_archivoen la tabladetalles. - Ver registros: abrir
Archivos/index.phppara ver la lista paginada. - Generar vista del directorio: ejecutar o abrir
view.phppara crearindex.htmlcon enlaces y botones de eliminar. - Script de infraestructura: ejecutar
lamp_manager.shen un sistema Debian/Ubuntu consudopara instalar/gestionar LAMP y vhosts.
Riesgos y recomendaciones rápidas
registro.phpusa GET: cambiar a POST para formularios que modifican datos.- Validación y permisos: revisar permisos y validar rutas en
view.phppara evitar eliminación de archivos sensibles. - Seguridad: añadir CSRF y sanitización adicional si se publica el proyecto en internet.
- Precaución con scripts: en
lamp_manager.sh, probar en un entorno controlado antes de ejecutar en servidores de producción.
Archivos listados (referencia rápida)
lamp_manager.shview.phpArchivos/index.phpArchivos/registro.phpArchivos/Imagenes/Favicon/site.webmanifestArchivos/Js/copytxt.jsArchivos/Sql/detalles.sqlArchivos/Sql/leeme.txtArchivos/Styles/tema.cssEtiquetas/Html.phpTests/index.php
Símbolos y funciones referenciadas
- Bash:
instalar_lamp(),instalar_vscode(),instalar_phpmyadmin(),crear_virtualhost(),listar_virtualhosts(),eliminar_virtualhost(),menu_principal(),mensaje_estado(),mensaje_error(),pausar(). - PHP/View:
generate_directory_view(). - DB/Archivos: tabla
detalles(Archivos/Sql/detalles.sql). - HTML helper:
SOLA,PAR,TEXTO,Html::crear(),Html::imprimir(). - JS:
setupCopyToClipboard(),copyUsingExecCommand().