Herramientas Informaticas

Categoría: Uncategorized Página 4 de 11

🎉 ¡Actualización! Ahora tu descargador de YouTube en Python también baja subtítulos

Entrada fija

🎉 ¡Actualización! Ahora tu descargador de YouTube en Python también baja subtítulos

¿Ya creaste tu app para descargar videos de YouTube con interfaz gráfica y arte ASCII? ¡Excelente! Ahora te traigo una mejora súper útil: descargar automáticamente los subtítulos si están disponibles. Aquí te explico qué cambió y cómo funciona.


🆕 ¿Qué incluye esta actualización?

  • ✅ Detecta si hay subtítulos disponibles (en español o inglés).
  • ✅ Los descarga en formato .srt.
  • ✅ Guarda los subtítulos en la misma carpeta que el video.
  • ✅ Notifica al usuario si no hay subtítulos disponibles.

🔧 ¿Cómo funciona?

Cuando pegas la URL del video y haces clic en “Descargar video”, la app ahora:

  1. Descarga el video como antes.
  2. Revisa si el video tiene subtítulos en español (es) o inglés (en).
  3. Si encuentra alguno, los convierte a .srt y los guarda.
  4. Muestra una notificación confirmando ambos archivos (video y subtítulos), o indica que no se encontraron subtítulos.

💡 Detalles técnicos

  • Usa la biblioteca pytubefix para extraer subtítulos.
  • Detecta tanto subtítulos manuales como automáticos (a.en).
  • El archivo de subtítulos se nombra con el título del video, con extensión .srt.

🐍 ¿Necesito actualizar algo?

Sí. Asegúrate de tener la versión más reciente de pytubefix. Puedes instalarla o actualizarla con este comando:

pip install -U pytubefix

📷 Vista general de la app

La app conserva su diseño clásico en consola con una ventana gráfica simple, amigable, y un toque especial con arte ASCII. Ahora además te avisa si los subtítulos están disponibles:

Estado: Video descargado. Subtítulos encontrados y guardados.

O, si no hay subtítulos:

Estado: Video descargado. No se encontraron subtítulos.

🧪 Código completo del programa actualizado


import tkinter as tk
from tkinter import ttk, messagebox, filedialog
from pytubefix import YouTube
import threading
import os

def descargar_video():
    url = entrada_url.get()
    carpeta = ruta_descarga.get()

    if not url:
        messagebox.showwarning("Advertencia", "Por favor, ingresa una URL de YouTube.")
        return

    try:
        boton_descargar.config(state=tk.DISABLED)
        estado.set("Descargando video...")

        yt = YouTube(url)
        video = yt.streams.filter(progressive=True, file_extension='mp4').order_by('resolution').desc().first()

        if not video:
            raise Exception("No se encontró un stream compatible.")

        video_path = video.download(output_path=carpeta)
        estado.set("Video descargado. Buscando subtítulos...")

        # Descargar subtítulos si existen
        captions = yt.captions
        caption = None

        if 'es' in captions:
            caption = captions['es']
        elif 'a.en' in captions:
            caption = captions['a.en']
        elif 'en' in captions:
            caption = captions['en']

        if caption:
            srt = caption.generate_srt_captions()
            titulo_archivo = yt.title.replace(" ", "_").replace("/", "_") + ".srt"
            ruta_srt = os.path.join(carpeta, titulo_archivo)
            with open(ruta_srt, "w", encoding="utf-8") as f:
                f.write(srt)
            estado.set("Video y subtítulos descargados.")
            messagebox.showinfo("Completado", f"Video y subtítulos guardados:\n{video_path}\n{ruta_srt}")
        else:
            estado.set("Video descargado. No se encontraron subtítulos.")
            messagebox.showinfo("Completado", f"Video descargado:\n{video_path}\n(No se encontraron subtítulos)")

    except Exception as e:
        estado.set("Error en la descarga.")
        messagebox.showerror("Error", str(e))
    finally:
        boton_descargar.config(state=tk.NORMAL)

def elegir_carpeta():
    carpeta = filedialog.askdirectory()
    if carpeta:
        ruta_descarga.set(carpeta)

def iniciar_descarga():
    hilo = threading.Thread(target=descargar_video)
    hilo.start()

# Crear ventana
ventana = tk.Tk()
ventana.title("Descargador de YouTube con Subtítulos")
ventana.geometry("600x460")
ventana.resizable(False, False)
ventana.configure(bg="#ffffff")

# Variables
ruta_descarga = tk.StringVar()
estado = tk.StringVar(value="Esperando URL...")

# Arte ASCII
ascii_art = r"""
 __     __     ______     __         ______     __   __    
/\ \  _ \ \   /\  __ \   /\ \       /\  ___\   /\ "-.\ \   
\ \ \/ ".\ \  \ \ \/\ \  \ \ \____  \ \  __\   \ \ \-.  \  
 \ \__/".~\_\  \ \_____\  \ \_____\  \ \_____\  \ \_\\"\_\ 
  \/_/   \/_/   \/_____/   \/_____/   \/_____/   \/_/ \/_/ 
"""
etiqueta_ascii = tk.Label(
    ventana,
    text=ascii_art,
    font=("Courier", 10),
    bg="#ffffff",
    fg="#cc0000",
    justify="left"
)
etiqueta_ascii.pack(pady=(5, 0))

# Estilo
estilo = ttk.Style()
estilo.theme_use("clam")
estilo.configure("TButton", font=("Segoe UI", 10), padding=6)
estilo.configure("TLabel", font=("Segoe UI", 10), background="#ffffff")
estilo.configure("TEntry", font=("Segoe UI", 10))

# Widgets
ttk.Label(ventana, text="URL del video de YouTube:").pack(pady=10)
entrada_url = ttk.Entry(ventana, width=60)
entrada_url.pack(pady=5)

frame_carpeta = ttk.Frame(ventana)
frame_carpeta.pack(pady=10)

ttk.Entry(frame_carpeta, textvariable=ruta_descarga, width=45).pack(side=tk.LEFT, padx=(0, 10))
ttk.Button(frame_carpeta, text="Elegir carpeta", command=elegir_carpeta).pack(side=tk.LEFT)

boton_descargar = ttk.Button(ventana, text="Descargar Video", command=iniciar_descarga)
boton_descargar.pack(pady=15)

ttk.Label(ventana, textvariable=estado, foreground="blue").pack(pady=5)

ventana.mainloop()

🚀 ¿Qué sigue?

Próximas mejoras que puedes añadir:

  • Selección manual de idioma de subtítulos.
  • Conversión automática a .txt.
  • Compatibilidad con listas de reproducción.

¿Te gustaría que te ayude con alguna de estas mejoras? ¡Déjamelo saber en los comentarios!

📘 Manual de instalación de PHP 8.2 en Deepin 23

Entrada fija

📘 Manual de instalación de PHP 8.2 en Deepin 23

Instalación de PHP 8.2 compilado desde fuente, con extensiones clave y configuración por PATH.


🔧 1. Instalar dependencias necesarias

sudo apt update
sudo apt install -y \
  build-essential \
  autoconf \
  bison \
  re2c \
  libxml2-dev \
  libcurl4-openssl-dev \
  libjpeg-dev \
  libpng-dev \
  libwebp-dev \
  libxpm-dev \
  libzip-dev \
  libssl-dev \
  libreadline-dev \
  libonig-dev \
  libicu-dev \
  libxslt-dev \
  pkg-config \
  wget \
  tar \
  unzip

📥 2. Descargar y descomprimir PHP 8.2

cd /tmp
wget https://www.php.net/distributions/php-8.2.18.tar.gz
tar -xzf php-8.2.18.tar.gz
cd php-8.2.18

⚙️ 3. Configurar para compilación

./configure --prefix=/opt/php8 \
  --with-openssl \
  --with-zlib \
  --with-curl \
  --with-readline \
  --enable-mbstring \
  --enable-intl \
  --enable-soap \
  --enable-opcache \
  --enable-bcmath \
  --enable-ftp \
  --enable-exif \
  --enable-sockets \
  --with-zip \
  --with-xsl \
  --with-gettext \
  --with-iconv \
  --with-pdo-mysql \
  --with-mysqli \
  --with-pdo-sqlite \
  --enable-fpm

🧱 4. Compilar e instalar

make -j$(nproc)
sudo make install

🧩 5. Activar PHP 8.2 por defecto usando $PATH

Agrega al final de tu archivo ~/.bashrc:

export PATH=/opt/php8/bin:$PATH

Aplica los cambios con:

source ~/.bashrc

✅ 6. Verificar instalación

php -v

Deberías ver algo como:

PHP 8.2.18 (cli) (built: ...)

🛠️ 7. Crear archivo php.ini (opcional)

sudo cp php.ini-development /opt/php8/lib/php.ini
nano /opt/php8/lib/php.ini

📦 8. Instalar Composer (opcional)

/opt/php8/bin/php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
/opt/php8/bin/php composer-setup.php
sudo mv composer.phar /usr/local/bin/composer

📚 9. Verificar extensiones cargadas

php -m

Debes ver extensiones como:

curl
intl
mbstring
openssl
readline
xsl
zip

📌 10. Alias útiles (opcional)

Agrega también a ~/.bashrc:

alias php="/opt/php8/bin/php"
alias phpize="/opt/php8/bin/phpize"
alias php-config="/opt/php8/bin/php-config"
alias composer="/opt/php8/bin/php /usr/local/bin/composer"

Y aplica con:

source ~/.bashrc

🎉 ¡Listo!

PHP 8.2 está instalado y funcionando con extensiones clave, sin afectar el sistema base de Deepin.

¡Descubre Linux Mint 22.1 “Xia”! Night Light y Rendimiento Potenciado.

Entrada fija

✨ Tu Escritorio, Más Hermoso Que Nunca

Prepárate para enamorarte de Cinnamon 6.4, el entorno de escritorio que se renueva con un tema por defecto espectacular: ¡diseño moderno, esquinas redondeadas y una sensación “flotante” que te encantará! Navegar por tu sistema nunca se vio tan bien.


 Descanso para tus Ojos con Night Light

¡Dile adiós a la fatiga visual! Con la nueva función Night Light, Linux Mint 22.1 ajusta automáticamente el color de tu pantalla para proteger tus ojos, especialmente durante la noche. ¡Tu vista te lo agradecerá! 


 Más Rápido y Eficiente “Bajo el Capó”

No solo es bonito, ¡también es potente! Gracias a la modernización de APT, la gestión de paquetes es ahora más rápida y estable, con traducciones impecables y un rendimiento que notarás. Además, Pipewire es el nuevo servidor de sonido por defecto, lo que significa un audio impecable y una mejor compatibilidad con tus apps favoritas.


 Pequeños Detalles, Gran Diferencia

  • Nemo ahora soporta miniaturas de archivos .ora.
  • Bulky te ayuda a limpiar los nombres de tus archivos.
  • Modos de energía para que tu sistema se adapte a ti.
  • ¡Y mucho más!

Basado en Ubuntu 24.04 LTS y con el Kernel 6.8, “Xia” es sinónimo de estabilidad y soporte a largo plazo hasta 2029.

¿Listo para transformar tu experiencia Linux? ¡Descarga ya Linux Mint 22.1 “Xia” y descubre un sistema operativo diseñado para deleitarte!


¡Corre la voz y comparte esta buena noticia! ¿Cuál es la característica que más te emociona de “Xia”?

¿Por qué deberías usar JOIN en lugar de FROM tabla1, tabla2 con condiciones en WHERE?

Entrada fija

¿Por qué deberías usar JOIN en lugar de FROM tabla1, tabla2 con condiciones en WHERE?

Cuando escribimos consultas SQL que involucran varias tablas, existen dos enfoques comunes para realizar combinaciones (joins) entre ellas:

1. JOIN explícito (moderno y recomendado):


SELECT *
FROM empleados e
JOIN departamentos d ON e.id_departamento = d.id;

2. JOIN implícito (forma antigua):


SELECT *
FROM empleados e, departamentos d
WHERE e.id_departamento = d.id;

Aunque ambos métodos pueden producir los mismos resultados, usar JOIN explícito es la práctica recomendada. Aquí te explicamos por qué:

1. Claridad y legibilidad

El uso de JOIN deja explícita la intención del programador: combinar datos entre tablas mediante una condición clara.

Comparación:


-- JOIN explícito
FROM empleados e
JOIN departamentos d ON e.id_departamento = d.id

-- JOIN implícito
FROM empleados e, departamentos d
WHERE e.id_departamento = d.id

Con más tablas, el estilo implícito se vuelve difícil de leer y mantener.

2. Separación de responsabilidades: combinación vs. filtrado

Con JOIN, las condiciones de unión van en ON, y los filtros en WHERE. Esto mejora la comprensión y evita errores como olvidar una condición de unión.

3. Evita productos cartesianos accidentales

Si olvidas una condición en el estilo implícito, puedes crear un producto cartesiano por accidente:


SELECT *
FROM empleados e, departamentos d;

Esto combinará todas las filas de ambas tablas, lo cual rara vez es lo que se desea.

4. Compatibilidad con OUTER JOIN

El estilo con FROM ... WHERE ... no permite correctamente LEFT, RIGHT o FULL JOIN.


SELECT *
FROM empleados e
LEFT JOIN departamentos d ON e.id_departamento = d.id;

Esto es imposible de hacer con el estilo antiguo sin JOIN.

5. Mejor soporte por los optimizadores de consultas

Los motores SQL modernos analizan mejor las consultas estructuradas con JOIN, permitiendo optimizaciones más eficientes.

🔚 Conclusión

Aunque el estilo implícito aún funciona, su uso está desaconsejado.

Usar JOIN te da:

  • Mayor claridad y mantenimiento.
  • Separación entre unión y filtros.
  • Soporte completo para combinaciones externas.
  • Menos riesgo de errores y resultados inesperados.

En resumen:
Siempre que necesites unir tablas, usa JOIN explícito. Es más claro, más seguro y más flexible.

CodeIgniter 4 Boilerplate Complemento De Pago

Entrada fija
Latest Stable Version
Total Downloads
Latest Unstable Version
License

   

image

CodeIgniter 4 Boilerplate Complemento de Pago

Libreria para generar el complemento de pago de las facturas pagadas en PPD

Requerimientos

  • PhpCfdi\SatCatalogos
  • julio101290/boilerplatelog
  • hermawan/codeigniter4-datatables
  • hermawan/boilerplatesells

Instalación

Ejecutar Comandos

composer require julio101290/boilerplatelog

composer require julio101290/boilerplatecompanies

composer require phpcfdi/sat-catalogos

composer require hermawan/codeigniter4-datatables

composer require julio101290/boilerplatestorages

composer require julio101290/boilerplatetypesmovement

composer require julio101290/boilerplatequotes

composer require julio101290/boilerplatecomprobanterd

composer require julio101290/boilerplatesells

composer require julio101290/boilerplatecomplementopago

Ejecutar comandos de migración y sembrado de base de datos

php spark boilerplatecompanies:installcompaniescrud

php spark boilerplatelog:installlog

php spark boilerplatestorages:installstorages

php spark boilerplatetypesmovement:installtypesmovement

php spark boilerplatequotes:installquotes

php spark boilerplatecomprobanterd:installcomprobanterd

php spark boilerplatequotes:installsells

php spark boilerplatecomplementopago:installcomplementopago

Creamos el Menu, Ejemplo

image

Listo ya podemos hacer complementos de pago

image
image

Usage

You can find how it works with the read code routes, controller and views etc. Finnally… Happy Coding!

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Contributions are very welcome.

License

This package is free software distributed under the terms of the MIT license.

CodeIgniter 4: Herramienta de Respaldo para Bases de Datos

Entrada fija
Latest Stable Version
Total Downloads
Latest Unstable Version
License

CodeIgniter 4 Boilerplate Backup

Esta biblioteca es una extensión del texto estándar de CodeIgniter4, diseñada específicamente para facilitar la interacción con bases de datos a través de un enfoque intuitivo y eficiente. Con una interfaz sencilla de base de datos de copias de seguridad para MariaDB/MySQL, permite a los desarrolladores gestionar respaldos de manera rápida y segura, eliminando la complejidad que a menudo acompaña a estos procesos. Además, cuenta con diversas funcionalidades adicionales, como la programación de tareas automáticas y la restauración fácil de datos, lo que la convierte en una herramienta esencial para aquellos que buscan optimizar el manejo de sus bases de datos en aplicaciones web.

Instalación

Ejecutar el siguiente comando

composer require julio101290/boilerplatbackup

Ejecutar el siguiente comando para crear las tablas y sembrar los datos de los permisos

php spark boilerplatebackup:installbackup

Crear el menú tal cual se ve en la imagen

Listo

Uso

Puede descubrir cómo funciona con las rutas de lectura de código, el controlador y las vistas, etc. Finalmente… ¡Feliz codificación!

Changelog

Please see CHANGELOG for more information what has changed recently.

Contribuciones

Las contribuciones son muy bienvenidas.

License

This package is free software distributed under the terms of the MIT license.

Instalación y Uso de Boilerplate Settings en CodeIgniter 4

Entrada fija

CodeIgniter 4 Boilerplate Settings

Esta biblioteca es una extensión para configuraciones globales de plantilla Boilerplate. Puede guardar el nombre de la compañía, el número de teléfono, el correo electrónico y cambiar el idioma en toda la aplicación CodeIgniter 4.

Instalación

Ejecutar comando

composer require julio101290/boilerplatesettings

Ejecutar el comando para la migración y sembrado

php spark boilerplatesettings:installsettings

Creamos el menu

image

Listo al final queda asi

image

Usage

You can find how it works with the read code routes, controller and views etc. Finnally… Happy Coding!

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Contributions are very welcome.

License

This package is free software distributed under the terms of the MIT license.

Crear Funciones LPAD y RPAD en SQL Server 2012

Entrada fija

Aunque SQL Server 2012 no cuenta con las funciones LPAD y RPAD de forma nativa, podemos crear funciones personalizadas que simulen su comportamiento.

Funciones personalizadas para LPAD y RPAD en SQL Server 2012:

SQL

CREATE FUNCTION dbo.LPAD (@string VARCHAR(MAX), @length INT, @pad_char CHAR(1))
RETURNS VARCHAR(MAX)
AS
BEGIN
    WHILE LEN(@string) < @length
        SET @string = @pad_char + @string;
    RETURN SUBSTRING(@string, 1, @length);
END;

CREATE FUNCTION dbo.RPAD (@string VARCHAR(MAX), @length INT, @pad_char CHAR(1))
RETURNS VARCHAR(MAX)
AS
BEGIN
    WHILE LEN(@string) < @length
        SET @string = @string + @pad_char;
    RETURN SUBSTRING(@string, 1, @length);
END;

Usa el código con precaución.

Explicación:

  • dbo.LPAD:
    • Recibe una cadena, una longitud deseada y un carácter de relleno.
    • Mientras la longitud de la cadena sea menor a la longitud deseada, agrega el carácter de relleno al inicio de la cadena.
    • Finalmente, devuelve un substring de la cadena resultante con la longitud especificada.
  • dbo.RPAD:
    • Funciona de manera similar a LPAD, pero agrega el carácter de relleno al final de la cadena.

Ejemplo de uso:

SQL

SELECT dbo.LPAD('hola', 10, '*') AS resultado_lpad,
       dbo.RPAD('mundo', 10, '-') AS resultado_rpad;

Usa el código con precaución.

Resultado:

resultado_lpadresultado_rpad
******holamundo——-

Exportar a Hojas de cálculo

Consideraciones:

  • Esquema: Asegúrate de reemplazar dbo con el esquema correcto en tu base de datos.
  • Tipos de datos: Estas funciones están diseñadas para cadenas de caracteres (VARCHAR). Puedes adaptarlas para otros tipos de datos si es necesario.
  • Rendimiento: Para un gran volumen de datos, considera crear índices en las columnas relevantes para mejorar el rendimiento de las consultas.
  • Funciones nativas: Si estás utilizando una versión más reciente de SQL Server, es posible que ya cuentes con las funciones LPAD y RPAD de forma nativa. Consulta la documentación de tu versión específica.

Ventajas de crear funciones personalizadas:

  • Flexibilidad: Puedes personalizar las funciones para adaptarse a tus necesidades específicas.
  • Reutilización: Una vez creadas, puedes utilizar estas funciones en múltiples consultas.
  • Legibilidad: El código es más fácil de entender y mantener.

Con estas funciones personalizadas, podrás realizar operaciones de relleno de cadenas en SQL Server 2012 de manera similar a como lo harías con las funciones LPAD y RPAD en otras bases de datos.

OFERTAS MERCADO PAGO

¡Hola! 👋
Te regalo $ 100 de descuento para que uses en Mercado Pago por primera vez.
Aprovéchalo para:
● Comprar en Mercado Libre
● Pagar con Debit Mastercard®
● Recargar tu celular
● Pagar tus servicios
¡El descuento aplica para un pago mínimo de $ 200 y es válido hasta 7 días! 🤑
Descarga la app para activar tu descuento:
https://mpago.li/1C1TreU

OFERTAS CAFFENIO

Quiero regalarte $30 para que disfrutes de una bebida en CAFFENIO. Para aceptarlos, regístrate en https://recomendados.caffenio.com/ncFd1Tuwta

Respaldos Automáticos y Eficientes de Bases de Datos MySQL con mysql-backup

La protección de los datos de una aplicación es fundamental. Los respaldos de bases de datos son una línea de defensa esencial ante posibles pérdidas de información causadas por errores humanos, fallas del sistema o ciberataques. En este post, te presentaremos una solución práctica y flexible para realizar respaldos automáticos de bases de datos MySQL: la herramienta mysql-backup autor original ramazancetinkaya/mysql-backup y las modificaciones que hemos implementado en nuestro fork julio101290.

¿Por qué un fork de mysql-backup?

Partiendo de la excelente base que ofrece mysql-backup, decidimos crear un fork con el objetivo de adaptar la herramienta a nuestras necesidades específicas y resolver ciertas limitaciones que identificamos durante su uso. Algunos de los motivos que nos llevaron a crear este fork fueron:

  • Mejorar el rendimiento: Optimizamos el proceso de respaldo, especialmente para bases de datos de gran tamaño, dividiendo las consultas en fragmentos más pequeños y evitando operaciones innecesarias.
  • Aumentar la estabilidad: Identificamos y corregimos algunos errores que podían causar inestabilidad en ciertos escenarios, como el manejo de valores nulos o la separación de consultas.
  • Añadir funcionalidades: Incorporamos nuevas características para ampliar las capacidades de la herramienta, como la posibilidad de personalizar el formato de los archivos de respaldo o integrar la herramienta con otros sistemas.

Instalación con Composer

Para instalar nuestro fork de mysql-backup, utiliza el siguiente comando en tu terminal:

Bash

composer require julio101290/mysql-backup

Usa el código con precaución.

Personalizaciones Realizadas

Hemos realizado las siguientes personalizaciones en nuestro fork:

  • División de consultas: Para mejorar el rendimiento en bases de datos grandes y evitar errores de conexión.
  • Simplificación de transacciones: Eliminamos el uso de transacciones innecesarias para reducir la complejidad.
  • Manejo de valores nulos: Aseguramos una representación correcta de los valores nulos en los respaldos.
  • Mejora del separador de consultas: Utilizamos un separador más robusto para evitar errores en la restauración.

Ejemplo de Uso con CodeIgniter4

PHP

// ... (código existente)

// Cargar la clase MySQLBackup
use Julio101290/MysqlBackup\Backup;

// ... (resto del código)

Usa el código con precaución.

Conclusión

Nuestro fork de mysql-backup ofrece una solución robusta y eficiente para realizar respaldos automáticos de bases de datos MySQL. Al personalizar esta herramienta, hemos obtenido un mayor control y flexibilidad para adaptarla a nuestras necesidades específicas.

Recomendaciones Adicionales:

  • Automatización: Integra esta funcionalidad en un sistema de automatización para realizar respaldos de forma periódica.
  • Seguridad: Implementa medidas de seguridad adecuadas para proteger los archivos de respaldo.
  • Pruebas: Realiza pruebas periódicas de restauración para verificar la integridad de los respaldos.
  • Documentación: Consulta la documentación completa de nuestro fork en GitHub para obtener más información.

Ejemplo de Uso con CodeIgniter4

PHP

// ... (código existente)

// Cargar la clase MySQLBackup
use Julio101290\MysqlBackup\Backup;

// Obtener los datos de conexión a la base de datos
$host = config('Database')->default["hostname"];
$dbname = config('Database')->default["database"];
$username = config('Database')->default["username"];
$password = config('Database')->default["password"];
$port = config('Database')->default["port"];

$DNS = "mysql:host=$host;port:$port;dbname=$dbname'";

$dbBackupConection = new \PDO($DNS, $username, $password);

// Crear una instancia de MySQLBackup
$mysqlBackup = new MySQLBackup($dbBackupConection, ROOTPATH . "writable/database/backup");

// Realizar un respaldo completo
$backup = $mysqlBackup->backup(false, true, false);

// ... (resto del código)

Usa el código con precaución.

Restauración de un Respaldo

PHP

// ... (código existente)

// Restaurar un respaldo
$restore = $mysqlBackup->restore($infoBackups["SQLFile"], true);

// ... (resto del código)

Usa el código con precaución.

Instalador Completo: Inno Setup + MariaDB 11.5

Entrada fija

Subscribe to continue reading

Subscribe to get access to the rest of this post and other subscriber-only content.

Página 4 de 11

Creado con WordPress & Tema de Anders Norén