Saltar al contenido
th3khan

caso 01

import-sql

Un solo archivo PHP que importa volcados .sql de cientos de megas donde phpMyAdmin se rinde. Público en GitHub, con tráfico orgánico constante.

Un volcado .sql representado como una losa de sentencias ilegibles, recorrido por un conducto ámbar en fragmentos separados hasta un cilindro de base de datos, con una barra de progreso a mitad de camino.

El problema

Importar un volcado de varios cientos de megas por phpMyAdmin falla por límite de subida, por tiempo de ejecución o por memoria — y casi nunca dice cuál de los tres.

La decisión

Un único archivo PHP sin dependencias que recorre el volcado en streaming y ejecuta sentencia a sentencia, con progreso en vivo y una vía por ruta del servidor que esquiva el límite de subida.

El resultado

Herramienta pública que sigue recibiendo tráfico orgánico años después de publicarla.

Nació en septiembre de 2023 de un problema propio: restaurar una base de datos real en un hosting compartido donde phpMyAdmin no llegaba al final. El entorno donde este problema existe — sin SSH, sin mysql por consola, sin tocar el php.ini — es exactamente el entorno donde no se puede instalar nada. Por eso la herramienta es un solo archivo PHP: se copia al servidor, se abre en el navegador y se borra al terminar.

Cómo funciona

  • Nunca carga el archivo en memoria. Lo recorre línea a línea con un manejador de archivo, acumula cada sentencia hasta su ; de cierre y la ejecuta en el momento. El tamaño del volcado deja de ser el límite; probado con volcados de ~200 MB.
  • El progreso se pinta con el propio streaming de HTML. Cada mil líneas emite un fragmento que actualiza la barra y vacía el buffer de salida. Sin AJAX, sin polling, sin framework.
  • Un error de SQL no aborta la importación. Se reporta con su número de línea, sigue con la siguiente sentencia y al final entrega el balance: cuántas se ejecutaron, cuántas fallaron.
  • La escotilla del límite de subida: si el .sql supera lo que el hosting deja subir por POST, se sube por FTP y se le da al script la ruta local. Esa segunda vía esquiva todos los límites de subida a la vez.

Dos vidas en el historial

La versión de 2023 eran 262 líneas que resolvían el problema de ese día, con límite de 10 minutos y sin barra de progreso. En mayo de 2025 la reescribí completa: interfaz con progreso real, doble método de entrada, tolerancia a errores por sentencia y sin límite de tiempo de ejecución. El historial de git cuenta las dos épocas tal cual.

Es la pieza mía que más gente ha usado sin saber quién la escribió.