╔══════════════════════════════════════════════════════════════════════════════╗
║                         ZIPSERVER — LEEME                                  ║
║              Servidor web portable con acceso desde internet               ║
╚══════════════════════════════════════════════════════════════════════════════╝

¿QUÉ ES ESTO?
─────────────
ZipServer convierte tu PC en un servidor web accesible desde cualquier lugar
del mundo. Arrastra un ZIP con tu sitio web y obtienes una URL pública en
cuestión de segundos. Sin configurar routers, sin instalar servidores.

Soporta sitios estáticos (HTML, CSS, JS) y sitios PHP con acceso a ficheros,
SQLite y .htaccess básico.


REQUISITOS
──────────
  • Windows 10 o superior (64 bits)
  • Node.js instalado → https://nodejs.org  (elige la versión LTS)
  • Conexión a internet
  • Una cuenta gratuita en ngrok → https://dashboard.ngrok.com/signup
    (solo se necesita una vez, es gratis y solo requiere un email)


PRIMEROS PASOS
──────────────
  1. Extrae este ZIP en cualquier carpeta (ej. D:\ZipServer\)

  2. Haz DOBLE CLIC en:  ejecutar_dev.bat
        → Se instalan las dependencias automáticamente la primera vez
        → Se abre el servidor en http://localhost:3000

  3. Abre tu navegador en:  http://localhost:3000

  4. La primera vez te pedirá tu token de ngrok:
        a) Ve a https://dashboard.ngrok.com/signup y crea una cuenta gratuita
        b) Copia tu authtoken desde https://dashboard.ngrok.com/get-started/your-authtoken
        c) Pégalo en la consola cuando se pida
        → El token se guarda y no vuelve a pedirse


USAR EL SERVIDOR
────────────────
  1. Con el servidor corriendo, abre http://localhost:3000 en el navegador
  2. Arrastra tu ZIP al área indicada (o haz clic para seleccionarlo)
  3. Espera unos segundos
  4. La URL pública aparece en pantalla y se copia al portapapeles
  5. Comparte esa URL con quien quieras — funciona desde cualquier navegador


TIPOS DE SITIO SOPORTADOS
──────────────────────────
  ESTÁTICO (HTML/CSS/JS)
    • Cualquier web con index.html en la raíz del ZIP
    • Sin configuración adicional

  PHP (detección automática)
    • El ZIP debe contener al menos un archivo .php
    • PHP 8.2 se descarga automáticamente la primera vez (~30 MB)
    • Se guarda en %APPDATA%\ZipServer\php\ y no vuelve a descargarse
    • Funciones disponibles: fopen, fwrite, file_get_contents, PDO SQLite...
    • Extensiones activas: curl, fileinfo, gd, mbstring, openssl,
                          pdo_sqlite, zip

  .HTACCESS (subconjunto básico)
    RewriteEngine On/Off         → Pretty URLs
    RewriteRule patron destino   → Redirecciones y enrutamiento
    deny from all                → Bloquear acceso público a un directorio
    allow from 192.168.1.        → Permitir solo ciertas IPs
    Options -Indexes             → Deshabilitar listado de carpetas
    AuthType Basic + AuthUserFile → Contraseña de acceso (formato .htpasswd)


ESTRUCTURA DEL ZIP
──────────────────
  El ZIP puede contener los archivos directamente en la raíz:

    mi_sitio.zip
    ├── index.html  ← o index.php
    ├── css/
    ├── js/
    └── ...

  O dentro de una única carpeta raíz (ZipServer la detecta y la ignora):

    mi_sitio.zip
    └── mi_sitio/
        ├── index.html
        └── ...


CÓMO FUNCIONA POR DENTRO
─────────────────────────
  ZipServer intenta conectarte al exterior en este orden:

    1. UPnP  →  pide al router que abra el puerto automáticamente
               (como hacen Xbox, PlayStation o Steam con los juegos)

    2. Cloudflare Tunnel  →  túnel gratuito sin configurar nada
               (puede fallar si el router bloquea el puerto 7844)

    3. ngrok  →  túnel seguro HTTPS sobre puerto 443
               (funciona en cualquier red, requiere cuenta gratuita)

  En redes restrictivas (muchos ISPs domésticos) entra en juego ngrok,
  que es el más compatible. La URL cambia cada vez que reinicias el servidor.


INSTALACIÓN DE PHP MANUAL (si la descarga automática falla)
────────────────────────────────────────────────────────────
  1. Abre en el navegador: https://windows.php.net/downloads/releases/
  2. Descarga el archivo:  php-8.x.x-nts-Win32-vs16-x64.zip
     (busca la versión más reciente con "nts" y "x64")
  3. Extrae TODO el contenido del ZIP en:
        C:\Users\TuUsuario\AppData\Roaming\ZipServer\php\
  4. Comprueba que existe el archivo:
        C:\Users\TuUsuario\AppData\Roaming\ZipServer\php\php.exe
  5. Vuelve a subir tu ZIP con archivos .php


ARCHIVOS Y CARPETAS IMPORTANTES
────────────────────────────────
  ejecutar_dev.bat          → Arranca el servidor (doble clic)
  instalar.bat              → Compila ZipServer.exe (opcional)
  src/                      → Código fuente (no modificar)
  %APPDATA%\ZipServer\      → Datos persistentes:
    ├── ngrok.exe            → Binario de ngrok (descarga automática)
    ├── ngrok_token.txt      → Tu authtoken de ngrok (guardado)
    ├── cloudflared.exe      → Binario de Cloudflare (descarga automática)
    └── php\                 → PHP portable (descarga automática)
        └── php.exe


NOTAS IMPORTANTES
─────────────────
  • La URL pública cambia cada vez que reinicias el servidor (con ngrok gratuito)
  • El servidor solo está activo mientras la ventana de consola esté abierta
  • No uses ZipServer para sitios en producción, es para pruebas y demostraciones
  • Si cierras y vuelves a abrir, tienes que subir el ZIP de nuevo
  • Los archivos del sitio y los que escribe PHP están en:
      %TEMP%\zipserver_site\   (C:\Users\TuUsuario\AppData\Local\Temp\zipserver_site\)
  • Esos archivos persisten mientras no se limpie la carpeta temporal
  • Para bases de datos, usa SQLite (un solo archivo .db dentro del ZIP)
    No incluyas MySQL/MariaDB — no están soportados en esta versión


PROBLEMAS FRECUENTES
────────────────────
  "npm no se reconoce"
    → Node.js no está instalado o no está en el PATH
    → Descárgalo de https://nodejs.org y reinicia la consola

  "ngrok API sin respuesta"
    → El token de ngrok es incorrecto o ha expirado
    → Borra el archivo %APPDATA%\ZipServer\ngrok_token.txt y vuelve a ejecutar

  "PHP no responde (502)"
    → PHP no se inició correctamente
    → Comprueba que %APPDATA%\ZipServer\php\php.exe existe
    → Reinstala PHP manualmente (ver sección anterior)

  La URL pública da error 404 o no carga
    → Asegúrate de que el ZIP tiene un index.html o index.php en la raíz
    → Espera 10-15 segundos tras subir el ZIP antes de probar la URL

  "No se pudo descargar PHP"
    → Instálalo manualmente (ver sección anterior)


──────────────────────────────────────────────────────────────────────────────
  Proyecto iniciado en 2018. Retomado y completado en 2026.
  Licencia MIT — úsalo, modifícalo y compártelo libremente.
──────────────────────────────────────────────────────────────────────────────
https://yopmail.com/es/
(para registros "temporales" confirmas cuenta, nunca recuperas contraseña)