One place for hosting & domains

      Utilizar

      Cómo instalar y utilizar Composer en Ubuntu 20.04


      Introducción

      Composer es una herramienta popular de administración de dependencias para PHP, creada principalmente para facilitar la instalación y actualización de dependencias de proyectos. Comprueba los demás paquetes de los que depende un proyecto específico y los instala utilizando las versiones apropiadas según los requisitos de este. Composer también se utiliza comúnmente para iniciar nuevos proyectos en función de marcos PHP populares, como Symfony y Laravel.

      A través de este tutorial, instalará y comenzará a utilizar Composer en un sistema Ubuntu 20.04.

      Requisitos previos

      Para seguir esta guía, necesitará acceso a un servidor de Ubuntu 20.04 como un non-root sudo user y un firewall habilitado en su servidor. Para configurarlo, puede consultar nuestra Guía de configuración inicial de servidores para Ubuntu 20.04.

      Paso 1: Instalar PHP y dependencias adicionales

      Además de las dependencias que ya deben estar incluidas en su sistema de Ubuntu 20.04, como git y curl, Composer requiere php-cli para ejecutar las secuencias de comandos PHP en la línea de comandos y unzip para extraer los archivos comprimidos. Instalaremos estas dependencias ahora.

      Primero, actualice la caché del administrador de paquetes ejecutando lo siguiente:

      Luego, ejecute el siguiente comando para instalar los paquetes requeridos:

      • sudo apt install php-cli unzip

      Se le solicitará confirmar la instalación escribiendo Y y luego ENTER.

      Una vez que haya instalado lo que se estipula en los requisitos previos, podrá proceder con la instalación de Composer.

      Paso 2: Descargar e instalar Composer

      Composer ofrece una secuencia de comandos de instalación escrita en PHP. La descargaremos, comprobaremos que no esté dañada y la utilizaremos para instalar Composer.

      Asegúrese de posicionarse en su directorio de inicio y obtenga el instalador usando curl:

      • cd ~
      • curl -sS https://getcomposer.org/installer -o composer-setup.php

      A continuación, verificaremos que el instalador descargado coincida con el hash SHA-384 para el instalador más reciente disponible en la página Composer Public Keys/Signatures. A fin de facilitar el paso de verificación, puede utilizar el siguiente comando para obtener de forma programática el hash más reciente de la página de Composer y almacenarlo en una variable de shell:

      • HASH=`curl -sS https://composer.github.io/installer.sig`

      Si desea verificar el valor obtenido, puede ejecutar lo siguiente:

      Output

      e0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1e613307e16318854d24ae64f26d17af3ef0bf7cfb710ca74755a

      Ahora, ejecute el siguiente código PHP, como se indica en la página de descarga de Composer, para verificar que la secuencia de comandos de instalación se pueda ejecutar de forma segura:

      • php -r "if (hash_file('SHA384', 'composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

      Verá el siguiente resultado:

      Output

      Installer verified
      

      Si aparece el mensaje Installer corrupt, tendrá que volver a descargar la secuencia de comandos de instalación y verificar nuevamente si utilizó el hash correcto. Luego, repita el proceso de verificación. Cuando cuente con un instalador verificado, podrá continuar.

      Para instalar composer de manera global, utilice el siguiente comando que lo descargará e instalará en todo el sistema como un comando llamado composer, en /usr/local/bin:

      • sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer

      Verá un resultado similar a este:

      Output

      All settings correct for using Composer Downloading... Composer (version 1.10.5) successfully installed to: /usr/local/bin/composer Use it: php /usr/local/bin/composer

      Para comprobar su instalación, ejecute lo siguiente:

      Output

      ______ / ____/___ ____ ___ ____ ____ ________ _____ / / / __ / __ `__ / __ / __ / ___/ _ / ___/ / /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ / ____/____/_/ /_/ /_/ .___/____/____/___/_/ /_/ Composer version 1.10.5 2020-04-10 11:44:22 Usage: command [options] [arguments] Options: -h, --help Display this help message -q, --quiet Do not output any message -V, --version Display this application version --ansi Force ANSI output --no-ansi Disable ANSI output -n, --no-interaction Do not ask any interactive question --profile Display timing and memory usage information --no-plugins Whether to disable plugins. -d, --working-dir=WORKING-DIR If specified, use the given directory as working directory. --no-cache Prevent use of the cache -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug ...

      Esto comprueba que Composer se instaló con éxito y está disponible en todo el sistema.

      Nota: Si prefiere tener ejecutables de Composer separados para cada proyecto que aloje en este servidor, puede instalarlos localmente para cada proyecto. Este método también es útil cuando su usuario de sistema no tiene permisos para instalar software en todo el sistema.

      Para ello, utilice el comando php composer-setup.php. Con esto, se generará un archivo composer.phar en su directorio actual que puede ejecutarse con php composer.phar.

      Ahora, veamos el uso de Composer para administrar dependencias.

      Paso 3: Usar Composer en un proyecto de PHP

      Los proyectos de PHP a menudo dependen de bibliotecas externas y la administración de estas dependencias y sus versiones puede ser complicada. Composer resuelve ese problema realizando un seguimiento de las versiones y dependencias del proyecto, al mismo tiempo que facilita el proceso de búsqueda, instalación y actualización de los paquetes que requiere el proyecto.

      Para utilizar Composer en su proyecto, necesitará un archivo composer.json. El archivo composer.json indica a Composer las dependencias que debe descargar para su proyecto y las versiones de cada paquete cuya instalación está permitida. Esto es extremadamente importante para preservar la uniformidad de su proyecto y evitar la instalación de versiones inestables que podrían causar problemas de compatibilidad con versiones anteriores.

      No necesita crear este archivo de forma manual; hay muchas probabilidades de cometer errores de sintaxis al hacerlo. Composer ofrece una opción interactiva para crear un nuevo archivo composer.json en base a la entrada del usuario, una buena opción si planea compartir su proyecto más adelante como paquete público en Packagist. Composer también genera de forma automática un archivo composer.json​​ barebones cuando ejecuta un comando composer require para incluir una dependencia a un proyecto recién creado.

      Para usar Composer en la instalación de un paquete como dependencia en un proyecto, se deben seguir estos pasos:

      • Identifique el tipo de biblioteca que requiere la aplicación.
      • Busque una biblioteca de código abierto adecuada  en Packagist.org, el repositorio oficial de paquetes de Composer.
      • Elija el paquete que desee usar.
      • Ejecute composer require para incluir la dependencia en el archivo composer.json e instale el paquete.

      Probemos esto con una aplicación de demostración.

      El objetivo de esta aplicación es transformar una oración en una cadena compatible con una URL; un slug. Esto se utiliza comúnmente para convertir los títulos de páginas en rutas URL (como la parte final de la URL de este tutorial).

      Comencemos creando un directorio para nuestro proyecto. Lo llamaremos slugify:

      • cd ~
      • mkdir slugify
      • cd slugify

      Aunque no sea obligatorio, ahora podrá ejecutar un comando composer init a fin de crear un archivo composer.json detallado para su proyecto. Ya que que el único objetivo de nuestro proyecto es demostrar la forma de instalar dependencias con Composer, utilizaremos un archivo composer.json más sencillo que se generará automáticamente cuando necesitemos nuestro primer paquete.

      Ahora será el momento de buscar en Packagist.org un paquete que puede servirnos para generar slugs. Si busca el término “slug” en Packagist, obtendrá un resultado similar a este:

      Resultados de búsqueda en Packagist para el término

      Observará dos números en el lado derecho de cada paquete de la lista. El número de la parte superior representa la cantidad de veces que se instaló el paquete a través de Composer y el de la parte inferior la cantidad de veces que se destacó un paquete en GitHub. En general, los paquetes con más instalaciones y más estrellas suelen ser más estables, ya que muchas personas los utilizan. También es importante revisar la descripción del paquete para asegurarse de que se adecue a lo que usted requiere.

      Necesitamos un convertidor de cadena a slug. Conforme a los resultados de la búsqueda, el paquete cocur/slugify, que aparece como el primer resultado de esa página, parece ser una buena opción al ofrecer una cantidad razonable de instalaciones y estrellas.

      Los paquetes en Packagist tienen un nombre de proveedor y un nombre de paquete. Cada paquete tiene un identificador único (un espacio de nombres) en el mismo formato que GitHub utiliza para sus repositorios: vendor/package​​​. La biblioteca que deseamos instalar utiliza el espacio de nombres cocur/slugify. Necesita el espacio de nombres del paquete para solicitarlo en su proyecto.

      Ahora que sabe exactamente qué paquete desea instalar, puede ejecutar composer require para incluirlo como una dependencia y generar también el archivo composer.json para su proyecto: Algo que es importante destacar al requerir paquetes es que Composer realiza un seguimiento tanto de las dependencias a nivel de aplicación como de las dependencias a nivel de sistema. Las dependencias a nivel de sistema son importantes para indicar en qué módulos PHP se basa un paquete. En el caso del paquete cocur/slugify, requiere un módulo PHP que aún no hemos instalado.

      Cuando un paquete requerido se basa en una biblioteca del sistema que no esté instalada actualmente en su servidor, recibirá un mensaje de error indicando el requisito que falta:

      • composer require cocur/slugify

      Output

      Using version ^4.0 for cocur/slugify ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Your requirements could not be resolved to an installable set of packages. Problem 1 - Installation request for cocur/slugify ^4.0 -> satisfiable by cocur/slugify[v4.0.0]. - cocur/slugify v4.0.0 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system. ...

      Para resolver el problema de dependencia del sistema, podemos buscar el paquete que falta utilizando apt search​​​:

      Output

      Sorting... Done Full Text Search... Done php-mbstring/focal 2:7.4+75 all MBSTRING module for PHP [default] php-patchwork-utf8/focal 1.3.1-1 all UTF-8 strings handling for PHP php7.4-mbstring/focal 7.4.3-4ubuntu1 amd64 MBSTRING module for PHP

      Después de ubicar el nombre del paquete correcto, puede utilizar apt una vez más para instalar la dependencia del sistema:

      • sudo apt install php-mbstring

      Una vez que la instalación haya finalizado, podrá ejecutar el comando composer require de nuevo:

      • composer require cocur/slugify

      Output

      Using version ^4.0 for cocur/slugify ./composer.json has been created Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 1 install, 0 updates, 0 removals - Installing cocur/slugify (v4.0.0): Downloading (100%) Writing lock file Generating autoload files

      Como se observa en el resultado, Composer automáticamente decidió la versión del paquete que utilizará. Si revisa el directorio de su proyecto, este contendrá dos nuevos archivos, composer.json y composer.lock, y un directorio vendor:

      Output

      total 12 -rw-rw-r-- 1 sammy sammy 59 May 4 13:56 composer.json -rw-rw-r-- 1 sammy sammy 3229 May 4 13:56 composer.lock drwxrwxr-x 4 sammy sammy 4096 May 4 13:56 vendor

      El archivo composer.lock se utiliza para almacenar información sobre las versiones de cada paquete que están instaladas y garantizar que se utilicen las mismas versiones si otra persona clona su proyecto e instala sus dependencias. En el directorio vendor se ubican las dependencias del proyecto. La carpeta vendor no debe comprometerse con el control de versión; solo debe incluir los archivos composer.json y composer.lock.

      Al instalar un proyecto que ya contenga un archivo composer.json, ejecute composer install para descargar las dependencias del proyecto.

      Veamos rápidamente las restricciones de versiones. Si verifica los contenidos de su archivo composer.json, verá algo parecido a lo siguiente:

      Output

      { "require": { "cocur/slugify": "^4.0" } }

      Posiblemente observe el carácter especial ^ antes del número de versión en composer.json. A fin de proporcionar flexibilidad y a su vez mantener la estabilidad de su proyecto, Composer admite diferentes restricciones y formatos para definir la versión requerida del paquete. El operador del símbolo de intercalación (^) utilizado por el archivo de generación automática composer.json es el operador recomendado para una máxima interoperabilidad, seguido del control de versión semántico. En este caso, define la versión 4.0 como la versión de compatibilidad mínima y permite actualizaciones a cualquier versión futura inferior a la 5.0.

      En general, no tendrá que alterar las restricciones de versiones de su archivo composer.json. Sin embargo, en algunas situaciones posiblemente deba editar las restricciones manualmente; por ejemplo, cuando se lance una nueva versión importante de su biblioteca requerida y desee actualizarla, o cuando la biblioteca que desee utilizar no siga el control de versión semántico.

      Aquí se muestran algunos ejemplos para que comprenda mejor el funcionamiento de las restricciones de versiones de Composer:

      Restricción Significado Versiones de ejemplos permitidas
      ^1.0 >= 1.0 < 2.0 1.0, 1.2.3, 1.9.9
      ^1.1.0 >= 1.1.0 < 2.0 1.1.0, 1.5.6, 1.9.9
      ~1.0 >= 1.0 < 2.0.0 1.0, 1.4.1, 1.9.9
      ~1.0.0 >= 1.0.0 < 1.1 1.0.0, 1.0.4, 1.0.9
      1.2.1 1.2.1 1.2.1
      1.* >= 1.0 < 2.0 1.0.0, 1.4.5, 1.9.9
      1.2. * >= 1.2 < 1.3 1.2.0, 1.2.3, 1.2.9

      Para acceder a una perspectiva más detallada de las restricciones de versiones de Composer, consulte la documentación oficial.

      A continuación, veamos la forma de cargar las dependencias automáticamente con Composer.

      Paso 4: Incluir la secuencia de comandos de carga automática

      Dado que PHP por sí mismo no carga automáticamente las clases, Composer proporciona una secuencia de comandos de carga automática que puede incluir en su proyecto para que la carga automática funcione en su proyecto. Composer genera este archivo de manera automática al añadir su primera dependencia.

      Lo único que debe hacer es incluir el archivo vendor/autoload.php en sus secuencias de comandos de PHP antes de cualquier instancia de clase.

      Probemos esto en nuestra aplicación de demostración. Abra un archivo nuevo llamado test.php en su editor de texto:

      Añada el siguiente código que agrega el archivo vendor/autoload.php, carga la dependencia cocur/slugify y la utiliza para crear un slug:

      test.php

      <?php
      require __DIR__ . '/vendor/autoload.php';
      
      use CocurSlugifySlugify;
      
      $slugify = new Slugify();
      
      echo $slugify->slugify('Hello World, this is a long sentence and I need to make a slug from it!');
      

      Guarde el archivo y cierre el editor.

      Ahora ejecute la secuencia de comandos:

      El resultado de esto es hello-world-this-is-a-long-sentence-and-i-need-to-make-a-slug-from-it.

      Las dependencias necesitan actualizaciones cuando se lanzan nuevas versiones. Veamos la forma de manejar eso.

      Paso 5: Actualizar dependencias del proyecto

      Cuando desee actualizar las dependencias de proyecto a versiones más recientes, ejecute el comando update:

      Con esto, se buscarán versiones más recientes de las bibliotecas que necesitó en su proyecto. Si se encuentra una versión más reciente y es compatible con la restricción de versión definida en el archivo composer.json, Composer sustituirá la versión anterior instalada. El archivo composer.lock se actualizará para reflejar estos cambios.

      También puede actualizar una o más bibliotecas determinadas especificándolas de la siguiente manera:

      • composer update vendor/package vendor2/package2

      Después de actualizar sus dependencias, asegúrese de verificar sus archivos composer.json y composer.lock en su sistema de control de versiones para que otros también puedan instalar estas versiones más recientes.

      Conclusión

      Composer es una herramienta poderosa que puede facilitar mucho el trabajo de gestionar dependencias en proyectos PHP. Ofrece una manera confiable de descubrir, instalar y actualizar los paquetes PHP de los que depende un proyecto. En esta guía, vimos cómo instalar Composer, incluir nuevas dependencias en un proyecto y actualizar estas dependencias una vez que haya nuevas versiones disponibles.



      Source link

      Cómo utilizar el tipo de datos BLOB de MySQL para almacenar imágenes con PHP en Ubuntu 18.04


      El autor seleccionó Girls Who Code para recibir una donación como parte del programa Write for DOnations.

      Introducción

      El tipo de datos de gran objeto binario (BLOB) es un tipo de datos de MySQL que puede almacenar datos binarios como los de archivos de imagen, multimedia y PDF.

      Al crear aplicaciones que requieren una base de datos estrechamente acoplada donde las imágenes deben estar sincronizadas con los datos relacionados (por ejemplo, un portal de empleados, una base de datos de estudiantes o una aplicación financiera), puede resultarle conveniente almacenar imágenes como las de fotos y firmas de pasaportes de estudiantes en una base de datos de MySQL junto con otra información relacionada.

      Aquí es donde entra el tipo de datos BLOB de MySQL. Este enfoque de programación elimina la necesidad de crear un sistema de archivos independiente para almacenar imágenes. El esquema también centraliza la base de datos, haciéndola más portátil y segura porque los datos están aislados del sistema de archivos. Crear copias de seguridad también es más sencillo, ya que que puede crear un solo archivo MySQL dump que contenga todos sus datos.

      La recuperación de datos es más rápida y, al crear registros, podrá estar seguro de que las reglas de validación de datos y la integridad referencial se preserven, en especial al utilizar transacciones en MySQL.

      En este tutorial, utilizará el tipo de datos BLOB de MySQL para almacenar imágenes con PHP en Ubuntu 18.04.

      Requisitos previos

      Para completar esta guía, necesitará lo siguiente:

      Paso 1: Crear una base de datos

      Comenzará creando una base de datos de ejemplo para su proyecto. Para hacer esto, aplique SSH a su servidor y luego ejecute el siguiente comando para iniciar sesión en su servidor MySQL como root:

      Ingrese la contraseña root de su base de datos de MySQL y presione INTRO para continuar.

      Luego, ejecute el siguiente comando para crear una base de datos. En este tutorial, lo llamaremos test_company:

      • CREATE DATABASE test_company;

      Una vez que cree la base de datos, verá el siguiente resultado:

      Output

      Query OK, 1 row affected (0.01 sec)

      Luego, cree una cuenta test_user en el servidor de MySQL y recuerde reemplazar PASSWORD por una contraseña segura:

      • CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'PASSWORD';

      Verá el siguiente resultado:

      Output

      Query OK, 0 rows affected (0.01 sec)

      Para otorgar a test_user privilegios completos respecto de la base de datos test_company, ejecute lo siguiente:

      • GRANT ALL PRIVILEGES ON test_company.* TO 'test_user'@'localhost';

      Asegúrese de obtener el siguiente resultado:

      Output

      Query OK, 0 rows affected (0.01 sec)

      Por último, elimine la tabla de privilegios para que MySQL vuelva a cargar los permisos:

      Asegúrese de ver el siguiente resultado:

      Output

      Query OK, 0 rows affected (0.01 sec)

      Ahora que la base de datos test_company y test_user están listos, continúe creando una tabla products para almacenar productos de ejemplo. Más adelante, utilizará esta tabla para insertar y obtener registros a fin de demostrar cómo funciona BLOB de MySQL.

      Cierre sesión en el servidor de MySQL:

      Luego, vuelva a iniciar sesión con las credenciales de test_user que creó:

      Cuando se le solicite, ingrese la contraseña de test_user y presione ENTER para continuar. Luego, posiciónese en la base de datos test_company escribiendo lo siguiente:

      Una vez que seleccione la base de datos test_company, MySQL mostrará lo siguiente:

      Output

      Database changed

      Luego, cree una tabla products ejecutando lo siguiente:

      • CREATE TABLE `products` (product_id BIGINT PRIMARY KEY AUTO_INCREMENT, product_name VARCHAR(50), price DOUBLE, product_image BLOB) ENGINE = InnoDB;

      Con este comando se crea una tabla llamada products. La tabla tiene cuatro columnas:

      • product_id: esta columna utiliza un tipo de datos BIGINT para admitir una gran lista de productos hasta un máximo de 2⁶³-1 artículos. Se marca la columna como PRIMARY KEY para identificar productos de manera exclusiva. Para que MySQL administre la generación de nuevos identificadores para columnas insertadas, utilizó la palabra clave AUTO_INCREMENT.

      • product_name: esta columna contiene los nombres de los productos. Se utiliza el tipo de datos VARCHAR, ya que este campo generalmente administra alfanuméricos de hasta un máximo de 50 caracteres; el límite de 50 es solo un valor hipotético utilizado para de este tutorial.

      • price: para fines demostrativos, su tabla products contiene la columna price que permite almacenar el precio minorista de los productos. Dado que algunos productos pueden tener valores flotantes (por ejemplo 23.69, 45.36, 102.99), se utiliza el tipo de datos DOUBLE.

      • product_image: en esta columna se utiliza el tipo de datos BLOB para almacenar los datos binarios reales de las imágenes de los productos.

      Se utiliza el ENGINE de almacenamiento InnoDB para que la tabla admita una amplia gama de funciones, incluso transacciones de MySQL. Después de ejecutar esto para crear la tabla products, verá el siguiente resultado:

      Output

      Query OK, 0 rows affected (0.03 sec)

      Cierre la sesión de su servidor de MySQL:

      Verá el siguiente resultado:

      Output

      Bye

      La tabla products ahora está lista para almacenar algunos registros, incluidas las imágenes de los productos y, en el siguiente paso, la completará con algunos productos.

      Paso 2: Crear secuencias de comandos PHP para conectar y completar la base de datos

      En este paso, creará una secuencia de comandos PHP que se conectará a la base de datos MySQL que creó en el paso 1. La secuencia de comandos preparará tres productos de ejemplo y los insertará en la tabla products.

      Para crear el código PHP, abra un nuevo archivo con su editor de texto:

      • sudo nano /var/www/html/config.php

      Luego, ingrese la siguiente información en el archivo y reemplace PASSWORD por la contraseña test_user que creó en el paso 1:

      /var/www/html/config.php

      <?php
      
      define('DB_NAME', 'test_company');
      define('DB_USER', 'test_user');
      define('DB_PASSWORD', 'PASSWORD');
      define('DB_HOST', 'localhost');
      
      $pdo = new PDO("mysql:host=" . DB_HOST . "; dbname=" . DB_NAME, DB_USER, DB_PASSWORD);
      $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
      
      

      Guarde y cierre el archivo.

      En este archivo, utilizó cuatro constantes PHP para conectarse a la base de datos MySQL que creó en el paso 1:

      • DB_NAME : esta constante contiene el nombre de la base de datos test_company.

      • DB_USER : esta variable contiene el nombre de usuario test_user.

      • DB_PASSWORD : esta constante almacena la PASSWORD de MySQL de la cuenta test_user.

      • DB_HOST: esto representa el servidor en el que se ubica la base de datos. En este caso, utilizará el servidor localhost.

      Con la siguiente línea de su archivo se inicia un objeto de datos de PHP (PDO) y se conecta a la base de datos MySQL:

      ...
      $pdo = new PDO("mysql:host=" . DB_HOST . "; dbname=" . DB_NAME, DB_USER, DB_PASSWORD);
      ...
      

      Cerca del final del archivo, configuró algunos atributos PDO:

      • ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION: este atributo indica a PDO que inicie una excepción que se puede registrar para depuración.
      • ATTR_EMULATE_PREPARES, false: esta opción aumenta la seguridad al indicar al motor de la base de datos MySQL que realice la preparación en lugar de PDO.

      Incluirá el archivo /var/www/html/config.php en dos secuencias de comandos PHP que creará luego para insertar y recuperar registros respectivamente.

      Primero, cree la secuencia de comandos PHP /var/www/html/insert_products.php para insertar registros en la tabla de productos:

      • sudo nano /var/www/html/insert_products.php

      Luego, añada la siguiente información al archivo /var/www/html/insert_products.php:

      /var/www/html/insert_products.php

      <?php
      
      require_once 'config.php';
      
      $products = [];
      
      $products[] = [
                    'product_name' => 'VIRTUAL SERVERS',
                    'price' => 5,
                    'product_image' => file_get_contents("https://i.imgur.com/VEIKbp0.png")
                    ];
      
      $products[] = [
                    'product_name' => 'MANAGED KUBERNETES',
                    'price' => 30,
                    'product_image' => file_get_contents("https://i.imgur.com/cCc9Gw9.png")
                    ];
      
      $products[] = [
                    'product_name' => 'MySQL DATABASES',
                    'price' => 15,
                    'product_image' => file_get_contents("https://i.imgur.com/UYcHkKD.png" )
                    ];
      
      $sql = "INSERT INTO products(product_name, price, product_image) VALUES (:product_name, :price, :product_image)";
      
      foreach ($products as $product) {
          $stmt = $pdo->prepare($sql);
          $stmt->execute($product);
      }
      
      echo "Records inserted successfully";
      

      Guarde y cierre el archivo.

      En el archivo, incluyó el archivo config.php en la parte superior. Este es el primer archivo que creó para definir las variables de la base de datos y conectarse a la base de datos. El archivo también inicia un objeto PDO y lo almacena en una variable $pdo.

      Luego, creó una matriz de datos de los productos que se insertarán en la base de datos. Aparte de product_name y price, que se preparan como cadenas y valores numéricos respectivamente, la secuencia de comandos utiliza la función file_get_contents integrada de PHP para leer imágenes de una fuente externa y pasarlas como cadenas a la columna product_image.

      Luego, preparó una instrucción SQL y utilizó la instrucción foreach{...} de PHP para insertar cada producto en la base de datos.

      Para ejecutar el archivo /var/www/html/insert_products.php, realice la ejecución en la ventana de su navegador utilizando la siguiente URL. Recuerde reemplazar your-server-IP por la dirección IP pública de su servidor:

      http://your-server-IP/insert_products.php
      

      Después de ejecutar el archivo, verá un mensaje de éxito en su navegador confirmando que los registros se insertaron en la base de datos.

      Mensaje de éxito que indica que los registros se insertaron en la base de datos

      Insertó con éxito tres registros que contienen imágenes de productos en la tabla products. En el siguiente paso, creará una secuencia de comandos PHP para obtener estos registros y mostrarlos en su navegador.

      Paso 3: Mostrar la información de los productos de la base de datos MySQL

      Con la información e imágenes de los productos en la base de datos, ahora debe codificar otra secuencia de comandos PHP que consulta y muestra la información de los productos en una tabla HTML en su navegador.

      Para crear el archivo, escriba lo siguiente:

      • sudo nano /var/www/html/display_products.php

      Luego, ingrese la siguiente información en el archivo:

      /var/www/html/display_products.php

      <html>
        <title>Using BLOB and MySQL</title>
        <body>
      
        <?php
      
        require_once 'config.php';
      
        $sql = "SELECT * FROM products";
        $stmt = $pdo->prepare($sql);
        $stmt->execute();
        ?>
      
        <table border="1" align = 'center'> <caption>Products Database</caption>
          <tr>
            <th>Product Id</th>
            <th>Product Name</th>
            <th>Price</th>
            <th>Product Image</th>
          </tr>
      
        <?php
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
            echo '<tr>';
            echo '<td>' . $row['product_id'] . '</td>';
            echo '<td>' . $row['product_name'] . '</td>';
            echo '<td>' . $row['price'] . '</td>';
            echo '<td>' .
            '<img src = "data:image/png;base64,' . base64_encode($row['product_image']) . '" width = "50px" height = "50px"/>'
            . '</td>';
            echo '</tr>';
        }
        ?>
      
        </table>
        </body>
      </html>
      

      Guarde los cambios del archivo y ciérrelo.

      Aquí, nuevamente incluyó el archivo config.php para establecer conexión con la base de datos. Luego, preparó y ejecutó una instrucción SQL utilizando PDO para obtener todos los elementos de la tabla products utilizando el comando SELECT * FROM products​​​.

      Luego, creó una tabla HTML y la completó con los datos de los productos utilizando la instrucción PHP while() {...}​​​. La línea $row = $stmt->fetch(PDO::FETCH_ASSOC)​​​ consulta la base de datos y almacena el resultado en la variable $row como matriz multidimensional, que luego se mostró en una columna de la tabla HTML utilizando la sintaxis $row['column_name']​​​.

      Las imágenes de la columna product_image se incluyen en el interior de las etiquetas <img src = "">. Se utilizan los atributos width y height para cambiar el tamaño de las imágenes por uno más pequeño que pueda caber en la columna de la tabla HTML.

      Para convertir los datos contenidos en el tipo de datos BLOB de vuelta en imágenes, se utilizan la función base64_encode de PHP integrada y la siguiente sintaxis para el esquema URI de datos:

      data:media_type;base64, base_64_encoded_data
      

      En este caso, imagen/png es media_type y la cadena codificada Base64 de la columna product_image es base_64_encoded_data.

      Luego, ejecute el archivo display_products.php en un navegador web escribiendo la siguiente dirección:

      http://your-server-IP/display_products.php
      

      Después de ejecutar el archivo display_products.php en su navegador, verá una tabla HTML con una lista de productos e imágenes asociados.

      Lista de productos de la base de datos MySQL

      Esto confirma que la secuencia de comandos de PHP para obtener imágenes de MySQL funciona según lo previsto.

      Conclusión

      A través de esta guía, utilizó el tipo de datos BLOB de MySQL para almacenar y mostrar imágenes con PHP en Ubuntu 18.04. También vio las ventajas básicas de almacenar imágenes en una base de datos respecto de hacerlo en un sistema de archivos. Entre ellas, se incluyen la portabilidad, la seguridad y la facilidad de respaldo. Si compila una aplicación, como un portal de estudiantes o una base de datos de empleados para los cuales se deban almacenar juntas la información y las imágenes relacionadas, esta tecnología puede resultarle muy útil.

      Para obtener más información sobre los tipos de datos compatibles en MySQL, consulte la guía de tipos de datos de MySQL. Si está interesado en más contenido relacionado con MySQL y PHP, consulte los siguientes tutoriales:



      Source link

      Cómo instalar y utilizar PostgreSQL en Ubuntu 20.04


      Introducción

      Los sistemas de administración de bases de datos relacionales son un componente clave de una gran cantidad de aplicaciones y sitios web. Proporcionan una alternativa estructurada para almacenar la información, organizarla y acceder a ella.

      PostgreSQL, o Postgres, es un sistema de administración de bases de datos relacionales que proporciona una implementación del lenguaje de consulta SQL. Cumple con los estándares y tiene muchas funciones avanzadas como transacciones fiables y concurrencia sin bloqueos de lectura.

      Esta guía demuestra cómo instalar Postgres en un servidor Ubuntu 20.04. También proporciona algunas instrucciones para la administración general de la base de datos.

      Requisitos previos

      Para completar este tutorial, necesitará un servidor de Ubuntu 20.04 configurado conforme a nuestra Guía de configuración inicial de servidores para Ubuntu 20.04. Una vez completado este tutorial de requisitos previos, su servidor debería contar con un non-root user con permisos sudo y un firewall básico.

      Paso 1: Instalar PostgreSQL

      Los repositorios predeterminados de Ubuntu contienen paquetes de Postgres, para que pueda instalarlos utilizando el sistema de empaquetado apt.

      Si no lo hizo recientemente, actualice el índice del paquete local de su servidor:

      Luego, instale el paquete de Postgres junto con un paquete -contrib, que agrega algunas utilidades y funcionalidades adicionales:

      • sudo apt install postgresql postgresql-contrib

      Ahora que el software está instalado, podemos analizar su funcionamiento y la forma en que puede diferenciarse de otros sistemas de administración de bases de datos relacionales que pueda haber utilizado.

      Paso 2: Utilizar roles y bases de datos de PostgreSQL

      Por defecto, Postgres utiliza un concepto llamado “roles” para gestionar la autenticación y la autorización. Estos son, en algunos aspectos, parecidos a las cuentas normales de estilo Unix, pero Postgres no distingue entre los usuarios y los grupos, y en su lugar prefiere el término más flexible de “rol”.

      Tras la instalación, Postgres se configura para usar la autenticación ident. Esto significa que asocia los roles de Postgres con una cuenta de sistema Unix o Linux correspondiente. Si existe un rol dentro de Postgres, un nombre de usuario de Unix o Linux con el mismo nombre puede iniciar sesión ocupando ese rol.

      El procedimiento de instalación creó una cuenta de usuario llamada postgres, que se asocia con el rol predeterminado de Postgres. Para usar Postgres, puede iniciar sesión en esa cuenta.

      Existen algunas maneras de usar esta cuenta para acceder a Postgres.

      Cambiar a la cuenta de postgres

      Cambie a la cuenta de postgres en su servidor escribiendo lo siguiente:

      Ahora, puede acceder de inmediato a una línea de comandos de PostgresSQL al escribir lo siguiente:

      Allí, puede interactuar con el sistema de administración de bases de datos como sea necesario.

      Salga de la línea de comandos de PostgreSQL escribiendo lo siguiente:

      Con esto, regresará a la línea de comandos de Linux de postgres.

      Acceder a una línea de comandos de Postgres sin cambiar de cuenta

      También puede ejecutar el comando que desee con la cuenta de postgres de forma directa a través de sudo.

      Por ejemplo, en el último caso se le indicó acceder a la línea de comandos de Postgres pasando primero al usuario de postgres y luego ejecutando psql para abrir la línea de comandos de Postgres. Puede realizarlo en un solo paso ejecutando el comando único psql como usuario de postgres con sudo, como se muestra:

      Esto le permitirá iniciar sesión de forma directa en Postgres sin el shell bash intermediario entre ellos.

      De nuevo, puede salir de la sesión interactiva de Postgres escribiendo lo siguiente:

      Para muchos casos de uso se requiere más de un rol de postgres. Continúe leyendo para saber cómo configurar estos roles.

      Paso 3: Crear un nuevo rol

      En este momento, solo tiene el rol de postgres configurado dentro de la base de datos. Puede crear nuevos roles desde la línea de comandos con el comando createrole. El indicador --interactive le solicitará el nombre del nuevo rol y también le preguntará si debería tener permisos de superusuario.

      Si inició sesión a través de la cuenta de postgres, puede crear un nuevo usuario escribiendo lo siguiente:

      Si, como alternativa, prefiere usar sudo para cada comando sin dejar de usar su cuenta normal, escriba lo siguiente:

      • sudo -u postgres createuser --interactive

      La secuencia de comandos le mostrará algunas opciones y, según sus respuestas, ejecutará los comandos correctos de Postgres para crear un usuario conforme a sus especificaciones.

      Output

      Enter name of role to add: sammy Shall the new role be a superuser? (y/n) y

      Puede obtener un mayor control pasando algunos indicadores adicionales. Consulte las opciones visitando la página de man:

      Ahora su instalación de Postgres tiene un usuario nuevo, pero aún no agregó bases de datos. En la sección siguiente se describe este proceso.

      Paso 4: Crear una nueva base de datos

      Otra suposición que el sistema de autenticación de Postgres realiza por defecto es que para cualquier rol utilizado en el inicio de sesión habrá una base de datos con el mismo nombre al que este podrá acceder.

      Esto significa que, si el usuario que creó en la última sección se llama sammy, ese rol intentará conectarse con una base de datos que, por defecto, también se llama “sammy”. Puede crear la base de datos apropiada con el comando createdb.

      Si inició sesión a través de la cuenta de postgres, escribiría algo similar a lo siguiente:

      Si, como alternativa, prefiere utilizar sudo para cada comando sin dejar de emplear su cuenta normal, escribiría lo siguiente:

      • sudo -u postgres createdb sammy

      Esta flexibilidad ofrece varias vías para crear bases de datos cuando sea necesario.

      Paso 5: Abrir una línea de comandos de Postgres con el nuevo rol

      Para iniciar sesión con la autenticación basada en ident, necesitará un usuario de Linux con el mismo nombre de su rol y su base de datos de Postgres.

      Si no tiene un usuario disponible de Linux que coincida, puede crear uno con el comando adduser. Deberá hacerlo desde su cuenta non-root con privilegios sudo (es decir, sin iniciar sesión como usuario de postgres):

      Una vez que esté disponible esta cuenta nueva, podrá cambiar y conectarse a la base de datos escribiendo lo siguiente:

      También podrá hacerlo de forma directa:

      Este comando le permitirá iniciar sesión de forma automática, suponiendo que todos los componentes se hayan configurado de forma correcta.

      Si desea que su usuario se conecte a una base de datos diferente, puede lograrlo especificando la base de datos de esta manera:

      Ya que inició sesión, puede verificar la información de su conexión actual escribiendo lo siguiente:

      Output

      You are connected to database "sammy" as user "sammy" via socket in "/var/run/postgresql" at port "5432".

      Esto resultará útil si se conecta a bases de datos no predeterminadas o con usuarios no predeterminados.

      Paso 6: Crear y eliminar tablas

      Ahora que sabe cómo conectarse al sistema de bases de datos de PostgreSQL, puede aprender algunas tareas básicas de administración de Postgres.

      La sintaxis básica para la creación de tablas es la siguiente:

      CREATE TABLE table_name (
          column_name1 col_type (field_length) column_constraints,
          column_name2 col_type (field_length),
          column_name3 col_type (field_length)
      );
      

      Como puede observar, estos comandos otorgan un nombre a la tabla y luego definen las columnas, el tipo de columna y la extensión máxima de los datos de campo. De manera opcional, también puede añadir restricciones de tabla para cada columna.

      Podrá obtener más información sobre cómo crear y administrar tablas en Postgres aquí.

      Para fines de demostración, cree la siguiente tabla:

      • CREATE TABLE playground (
      • equip_id serial PRIMARY KEY,
      • type varchar (50) NOT NULL,
      • color varchar (25) NOT NULL,
      • location varchar(25) check (location in ('north', 'south', 'west', 'east', 'northeast', 'southeast', 'southwest', 'northwest')),
      • install_date date
      • );

      Este comando creará una tabla que realiza un inventario de equipos para áreas recreativas. La primera columna de la tabla contendrá números de ID de equipos de tipo serial, que es un entero que se incrementa de forma automática. Esta columna también tiene la limitación de PRIMARY KEY, lo que significa que los valores en su interior deben ser únicos y no pueden ser nulos.

      Las siguientes dos líneas crean columnas para type y color de los equipos respectivamente, que no pueden estar vacías. La siguiente línea crea una columna location y una restricción que requiere que el valor sea uno de los ocho valores posibles. La última línea crea una columna de fecha en la cual se registra la fecha en la que usted instaló el equipo.

      Para dos de las columnas (equip_id e install_date), el comando no especifica una longitud de campo. Esto se debe a que algunos tipos de datos no requieren una longitud establecida, dado que la extensión o el formato están implícitos.

      Puede ver su tabla nueva escribiendo lo siguiente:

      Output

      List of relations Schema | Name | Type | Owner --------+-------------------------+----------+------- public | playground | table | sammy public | playground_equip_id_seq | sequence | sammy (2 rows)

      Su tabla de áreas de recreación se encuentra aquí, pero también existe algo llamado playground_equip_id_seq que responde al tipo sequence. Esto es una representación del tipo serial que usted atribuyó a su columna de equip_id. Esto realiza un seguimiento del número que sigue en la secuencia y se genera de forma automática para columnas de este tipo.

      Si desea ver solo la tabla sin la secuencia, puede escribir lo siguiente:

      Output

      List of relations Schema | Name | Type | Owner --------+------------+-------+------- public | playground | table | sammy (1 row)

      Ahora que tenemos una tabla lista, la usaremos para practicar la administración de datos.

      Paso 7: Agregar, consultar y eliminar datos en una tabla

      Ahora que tiene una tabla, puede insertar algunos datos en ella. Como ejemplo, añada un tobogán y un columpio al invocar la tabla en la que los desea agregar, nombrar las columnas y, luego, proporcionar datos para cada una de ellas de la siguiente forma:

      • INSERT INTO playground (type, color, location, install_date) VALUES ('slide', 'blue', 'south', '2017-04-28');
      • INSERT INTO playground (type, color, location, install_date) VALUES ('swing', 'yellow', 'northwest', '2018-08-16');

      Debe tener cuidado al ingresar los datos para evitar algunos errores comunes. Para empezar, no escriba los nombres de las columnas entre comillas. Estás sí se necesitarán para los valores de la columna que ingresó.

      Otro aspecto que debe tener en cuenta es no ingresar un valor para la columna equip_id. Esto se debe a que se genera de forma automática siempre que se añade una fila nueva a la tabla.

      Recupere la información que agregó escribiendo lo siguiente:

      • SELECT * FROM playground;

      Output

      equip_id | type | color | location | install_date ----------+-------+--------+-----------+-------------- 1 | slide | blue | south | 2017-04-28 2 | swing | yellow | northwest | 2018-08-16 (2 rows)

      Aquí, puede ver que su equip_id se completó con éxito y que todos sus otros datos se organizaron de forma correcta.

      Si el tobogán del área de recreación se daña y tiene que eliminarlo, también puede eliminar la fila de su tabla escribiendo lo siguiente:

      • DELETE FROM playground WHERE type="slide";

      Consulte la tabla de nuevo:

      • SELECT * FROM playground;

      Output

      equip_id | type | color | location | install_date ----------+-------+--------+-----------+-------------- 2 | swing | yellow | northwest | 2018-08-16 (1 row)

      Observará que la fila de slide ya no se encuentra en la tabla.

      Paso 8: Agregar y eliminar columnas en una tabla

      Después de crear una tabla, puede modificarla añadiendo o eliminando columnas. Agregue una columna para mostrar la última visita de mantenimiento por cada equipo escribiendo lo siguiente:

      • ALTER TABLE playground ADD last_maint date;

      Si vuelve a ver la información de su tabla, observará que se agregó la columna nueva, pero no se ingresaron datos:

      • SELECT * FROM playground;

      Output

      equip_id | type | color | location | install_date | last_maint ----------+-------+--------+-----------+--------------+------------ 2 | swing | yellow | northwest | 2018-08-16 | (1 row)

      Si determina que su equipo de trabajo utiliza una herramienta separada para dar seguimiento al historial de mantenimiento, puede eliminar la columna escribiendo lo siguiente:

      • ALTER TABLE playground DROP last_maint;

      Con esto, se eliminan la columna last_maint y los valores que se encuentren en ella, pero deja intactos todos los demás datos.

      Paso 9: Actualizar datos de una tabla

      Hasta ahora, a través de este tutorial aprendió a agregar registros a una tabla y a eliminarlos de ella, pero aún no se abordó la forma de modificar los registros existentes.

      Puede actualizar los valores de una entrada existente buscando el registro que desee y fijando el valor que prefiera utilizar para la columna. Puede consultar el registro de swing (se incluirán todos los columpios de su tabla) y cambiar su color a red. Esto puede ser útil si asignó una tarea de pintura al columpio:

      • UPDATE playground SET color="red" WHERE type="swing";

      Puede verificar la eficacia de la operación consultando los datos de nuevo:

      • SELECT * FROM playground;

      Output

      equip_id | type | color | location | install_date ----------+-------+-------+-----------+-------------- 2 | swing | red | northwest | 2018-08-16 (1 row)

      Como puede ver, ahora, el columpio está registrado como rojo.

      Conclusión

      De esta manera, habrá configurado PostgreSQL en su servidor de Ubuntu 20.04. Si desea obtener más información sobre Postgres y cómo usarlo, le recomendamos que consulte las siguientes guías:



      Source link