One place for hosting & domains

      Como atualizar para o Ubuntu 20.04 Focal Fossa


      Introdução

      A versão mais recente de Suporte de longo-prazo (LTS) do sistema operacional Ubuntu, o Ubuntu 20.04 (Focal Fossa), foi lançada no dia 23 de abril de 2020. Este guia explicará como atualizar um sistema Ubuntu de versão 18.04 ou superior para o Ubuntu 20.04.

      Aviso: como em quase qualquer atualização entre versões principais de um sistema operacional, este processo possui um risco inerente de falha, perda de dados ou quebra de configuração de software. Backups abrangentes e testes extensivos são fortemente aconselhados.

      Para evitar esses problemas, recomendamos que você migre para um servidor Ubuntu 20.04 novo ao invés de atualizar um já existente. Você ainda pode precisar revisar diferenças na configuração de alguns softwares ao atualizar, mas o sistema principal provavelmente terá uma maior estabilidade. Siga nossa série sobre como migrar para um novo servidor Linux para aprender como migrar entre servidores.

      Pré-requisitos

      Este guia supõe que você tenha um sistema Ubuntu 18.04 ou superior configurado com um usuário não root com sudo habilitado.

      Problemas possíveis

      Embora muitos sistemas possam ser atualizados sem nenhum incidente, geralmente é mais seguro e mais previsível migrar para uma nova versão principal instalando a distribuição do zero, configurando os serviços realizando testes cuidadosos durante o processo. Em seguida, você migra os aplicativos ou dados de usuário em um passo separado.

      Nunca deve-se atualizar um sistema de produção sem antes testar primeiro todos os seus softwares e serviços implantados em um ambiente de preparo. Lembre-se de que as bibliotecas, linguagens e serviços do sistema podem ter mudado substancialmente. Antes de atualizar, consulte as Notas de atualização do Focal Fossa.

      Passo 1 — Fazendo um backup do seu sistema

      Antes de tentar realizar uma grande atualização em qualquer sistema, você deve garantir que não perderá dados caso a atualização dê errado. A melhor maneira de conseguir isso é criando um backup do seu sistema de arquivos inteiro. Se não fizer isso, certifique-se de que você tenha cópias dos diretórios home do usuário, todos os arquivos de configuração personalizados e os dados armazenados pelos serviços, como os dos bancos de dados relacionais.

      Em um Droplet da DigitalOcean, uma das abordagens é desligar o sistema e fazer uma snapshot (desligar garante que o sistema de arquivos ficará mais consistente). Veja Como criar snapshots de Droplets para obter mais detalhes sobre o processo de snapshot. Após verificar que a atualização do Ubuntu foi bem-sucedida, você pode excluir o snapshot para que você não seja mais cobrado pelo armazenamento.

      Para saber os métodos de backup que funcionarão na maioria dos sistemas do Ubuntu, veja Como escolher uma estratégia de backup eficaz para seu VPS.

      Passo 2 — Atualizando os pacotes instalados atualmente

      Antes de começar a atualização de versão, é mais seguro atualizar todos os pacotes para as versões mais recentes, compatíveis com a versão atual. Comece atualizando a lista de pacotes.

      A seguir, atualize os pacotes instalados para suas últimas versões disponíveis:

      Uma lista de atualizações será mostrada e você será solicitado a continuar. Responda y para aceitar e pressione Enter.

      Este processo pode levar algum tempo. Assim que terminar, utilize o comando dist-upgrade com o apt-get, que executará todas as atualizações adicionais que envolvem alterações de dependências, adicionando ou removendo novos pacotes conforme necessário. Isso realizará uma série de atualizações que podem não ter sido feitas no passo anterior do apt upgrade:

      Novamente, responda y quando solicitado a continuar e espere que as atualizações terminem.

      Agora que você tem uma instalação atualizada do Ubuntu, utilize o do-release-upgrade para atualizar para a versão 20.04.

      Passo 3 — Atualizando a ferramenta do-release-upgrade do Ubuntu

      Tradicionalmente, as versões do Ubuntu são atualizáveis através da modificação do /etc/apt/sources.list do Apt – que especifica os repositórios de pacotes – e usando o apt-get dist-upgrade para realizar a atualização em si. Embora esse processo ainda possa funcionar, o Ubuntu fornece uma ferramenta chamada do-release-upgrade para facilitar a atualização e torná-la segura.

      O do-release-upgrade faz a verificação por uma nova versão, atualizando o sources.list, além de diversas outras tarefas. Além disso, é o caminho de atualização oficialmente recomendado para atualizações de servidor que precisam ser executadas através de uma conexão remota.

      Comece executando o do-release-upgrade sem nenhuma opção:

      Se a nova versão do Ubuntu ainda não foi lançada oficialmente, você pode obter o seguinte resultado:

      Output

      Checking for a new Ubuntu release No new release found

      Observe que no servidor Ubuntu, a nova versão LTS não é disponibilizada para o do-release-upgrade até a primeira versão de ponto, neste caso, a 20.04.1. Normalmente, ela chega alguns meses após a data inicial de lançamento.

      Se você não ver uma versão disponível, adicione a opção -d para atualizar para a versão de desenvolvimento:

      • sudo do-release-upgrade -d

      Se você estiver conectado ao seu sistema através do SSH, você será questionado se deseja continuar. Para máquinas virtuais ou servidores gerenciados, você deve lembrar que a perda de conectividade SSH é um risco, especialmente se você não tiver outro meio de se conectar remotamente ao console do sistema (como, por exemplo, um recurso de console baseado em Web).

      Para outros sistemas sob seu controle, lembre-se de que é mais seguro realizar atualizações de sistema operacional importantes apenas quando você tiver acesso físico direto à máquina.

      No prompt, digite y e pressione Enter para continuar:

      Output

      Reading cache Checking package manager Continue running under SSH? This session appears to be running under ssh. It is not recommended to perform a upgrade over ssh currently because in case of failure it is harder to recover. If you continue, an additional ssh daemon will be started at port '1022'. Do you want to continue? Continue [yN]

      A seguir, você será informado de que o do-release-upgrade está inciando uma nova instância do sshd na porta 1022:

      Output

      Starting additional sshd To make recovery in case of failure easier, an additional sshd will be started on port '1022'. If anything goes wrong with the running ssh you can still connect to the additional one. If you run a firewall, you may need to temporarily open this port. As this is potentially dangerous it's not done automatically. You can open the port with e.g.: 'iptables -I INPUT -p tcp --dport 1022 -j ACCEPT' To continue please press [ENTER]

      Pressione Enter. Em seguida, você pode ser avisado de que uma entrada espelho não foi encontrada. Em sistemas da DigitalOcean, é seguro ignorar este aviso e continuar com a atualização, pois um espelho local para 20.04 está na verdade disponível. Digite y:

      Output

      Updating repository information No valid mirror found While scanning your repository information no mirror entry for the upgrade was found. This can happen if you run an internal mirror or if the mirror information is out of date. Do you want to rewrite your 'sources.list' file anyway? If you choose 'Yes' here it will update all 'bionic' to 'focal' entries. If you select 'No' the upgrade will cancel. Continue [yN]

      Assim que as novas listas de pacotes forem baixadas e as alterações calculadas, você será questionado se deseja iniciar a atualização. Novamente, digite y para continuar:

      Output

      Do you want to start the upgrade? 18 installed packages are no longer supported by Canonical. You can still get support from the community. 3 packages are going to be removed. 142 new packages are going to be installed. 452 packages are going to be upgraded. You have to download a total of 338 M. This download will take about 42 minutes with a 1Mbit DSL connection and about 13 hours with a 56k modem. Fetching and installing the upgrade can take several hours. Once the download has finished, the process cannot be canceled. Continue [yN] Details [d]

      Agora, novos pacotes serão recuperados, descompactados e instalados. Mesmo se seu sistema estiver em uma conexão rápida, isso levará algum tempo.

      Durante a instalação, pode ser que diálogos interativos para várias perguntas sejam apresentados a você. Por exemplo, você pode ser questionado se deseja reiniciar automaticamente os serviços quando necessário:

      Diálogo de reinicialização de serviço

      Neste caso, é seguro responder Yes. Em outros casos, você pode ser questionado se deseja substituir um arquivo de configuração que você modificou. Muitas vezes, esta é uma decisão que precisa ser analisada e é provável que seja necessário conhecimento sobre softwares específicos. Isso foge do âmbito deste tutorial.

      Assim que os novos pacotes terminarem de ser instalados, você será questionado se está tudo pronto para remover pacotes obsoletos. Em um sistema de estoque sem nenhuma configuração personalizada, deve ser seguro digitar y aqui. Em um sistema em que realizou grandes modificações, você pode querer digitar d e inspecionar a lista de pacotes a ser removido, caso ela inclua qualquer coisa que precise reinstalar mais tarde.

      Output

      Remove obsolete packages? 53 packages are going to be removed. Continue [yN] Details [d]

      Por fim, supondo que tudo tenha corrido bem, você será informado de que a atualização foi concluída e que uma reinicialização é necessária. Digite y para continuar:

      Output

      System upgrade is complete. Restart required To finish the upgrade, a restart is required. If you select 'y' the system will be restarted. Continue [yN]

      Em uma sessão SSH, você provavelmente verá algo parecido com o seguinte:

      Output

      Connection to 203.0.113.241 closed by remote host. Connection to 203.0.113.241 closed.

      Você pode precisar pressionar uma tecla aqui para ir para o seu prompt local, pois sua sessão SSH terá side finalizada no servidor.

      Espere um pouco para que seu servidor seja reinicializado, então, reconecte-se. Na tela de login, você deve ser saudado por uma mensagem confirmando que está agora no Focal Fossa:

      Output

      Welcome to Ubuntu 20.04 LTS (GNU/Linux 5.4.0-29-generic x86_64)

      Conclusão

      Você deve ter agora uma instalação funcional do Ubuntu 20.04. A partir daqui, você provavelmente precisará investigar as alterações de configuração necessárias para os serviços e aplicativos implantados.

      Você pode encontrar mais tutoriais sobre a versão 20.04 e perguntas em nossa página com o rótulo Tutoriais Ubuntu 20.04.



      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

      Como Usar o Tipo de Dados MySQL BLOB para Armazenar Imagens com PHP no Ubuntu 18.04


      O autor selecionou Girls Who Code para receber uma doação como parte do programa Write for DOnations.

      Introdução

      Um Binary Large Object (BLOB) é um tipo de dados MySQL que pode armazenar dados binários como imagens, multimedia e arquivos PDF.

      Ao criar aplicações que requerem um banco de dados fortemente acoplado onde imagens devem estar sincronizadas com dados relacionados (por exemplo, um portal de funcionários, um banco de dados de estudantes, ou uma aplicação financeira), você pode achar que é conveniente armazenar imagens como fotos de passaporte e assinaturas de alunos em um banco de dados MySQL, juntamente com outras informações relacionadas.

      É aqui que o tipo de dados MySQL BLOB entra. Esta abordagem de programação elimina a necessidade de criar um sistema de arquivos separado para armazenar imagens. O esquema também centraliza o banco de dados, tornando-o mais portátil e seguro porque os dados estão isolados do sistema de arquivos. A criação de backups também é mais simples, pois você pode criar um único arquivo de dump do MySQL que contém todos os seus dados.

      A recuperação de dados é mais rápida e, ao criar registros, você pode garantir que as regras de validação de dados e a integridade referencial sejam mantidas especialmente ao utilizar as transações do MySQL.

      Neste tutorial, você usará o tipo de dados MySQL BLOB para armazenar imagens com PHP no Ubuntu 18.04.

      Pré-requisitos

      Para seguir com este guia, você precisará do seguinte:

      Passo 1 — Criando um Banco de Dados

      Você começará criando um banco de dados de exemplo para seu projeto. Para fazer isso, faça um SSH em seu servidor e, em seguida, execute o seguinte comando para fazer login no seu servidor MySQL como root:

      Digite a senha do root do seu banco de dados MySQL e clique em ENTER para continuar.

      Em seguida, execute o seguinte comando para criar um banco de dados. Neste tutorial, iremos nomeá-lo como test_company:

      • CREATE DATABASE test_company;

      Assim que o banco de dados for criado, você verá a seguinte saída:

      Output

      Query OK, 1 row affected (0.01 sec)

      Em seguida, crie uma conta test_user no servidor MySQL e lembre-se de substituir PASSWORD por uma senha forte:

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

      Você verá o seguinte resultado:

      Output

      Query OK, 0 rows affected (0.01 sec)

      Para conceder ao test_user privilégios completos no banco de dados test_company, execute:

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

      Certifique-se de obter a seguinte saída:

      Output

      Query OK, 0 rows affected (0.01 sec)

      Finalmente, libere a tabela de privilégios para que o MySQL recarregue as permissões:

      Certifique-se de ver a seguinte saída:

      Output

      Query OK, 0 rows affected (0.01 sec)

      Agora que o banco de dados test_company e o test_user estão prontos, você prosseguirá com a criação de uma tabela products para armazenar produtos de exemplo. Você usará esta tabela mais tarde para inserir e recuperar registros para demonstrar como o MySQL BLOB funciona.

      Faça log-off do servidor MySQL:

      Em seguida, faça login novamente com as credenciais do test_user que você criou:

      Quando solicitado, digite a senha para o test_user e tecle ENTER para continuar. Em seguida, alterne para o banco de dados test_company digitando o seguinte:

      Assim que o banco de dados test_company for selecionado, o MySQL exibirá:

      Output

      Database changed

      Em seguida, crie uma tabela products executando:

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

      Este comando cria uma tabela com nome products. A tabela tem quatro colunas:

      • product_id: esta coluna utiliza um tipo de dados BIGINT para acomodar uma grande lista de produtos até um máximo de 2⁶³-1 items. Você marcou a coluna como PRIMARY KEY para identificar unicamente os produtos. Para que o MySQL trate da geração de novos identificadores para as colunas inseridas, você usou a palavra-chave AUTO_INCREMENT.

      • product_name: esta coluna contém os nomes dos produtos. Você usou o tipo de dados VARCHAR já que este campo geralmente irá lidar com alfanuméricos com um máximo de 50 caracteres — o limite de 50 é apenas um valor hipotético usado para o propósito deste tutorial.

      • price: para fins de demonstração, sua tabela products contém a coluna de preço para armazenar o preço de varejo dos produtos. Como alguns produtos podem ter valores de ponto flutuante (por exemplo, 23.69, 45.36, 102.99), você utilizou o tipo de dados DOUBLE.

      • product_image: esta coluna utiliza um tipo de dados BLOB para armazenar os dados do binário real das imagens dos produtos.

      Você usou o InnoDB storage ENGINE para que a tabela suporte uma grande variedade de recursos, incluindo as transações do MySQL. Após executar isso para criar a tabela de products, você verá a seguinte saída:

      Output

      Query OK, 0 rows affected (0.03 sec)

      Saia do seu servidor MySQL:

      Você receberá a seguinte saída:

      Output

      Bye

      A tabela products agora está pronta para armazenar alguns registros, incluindo imagens de produtos e você a preencherá com alguns produtos no próximo passo.

      Neste passo, você criará um script PHP que se conectará ao banco de dados MySQL que você criou no Passo 1. O script preparará três produtos de exemplo e os inserirá na tabela products.

      Para criar o código PHP, abra um novo arquivo com seu editor de texto:

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

      Em seguida, digite as seguintes informações no arquivo e substitua PASSWORD pela senha do test_user que você criou no Passo 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);
      
      

      Salve e feche o arquivo.

      Neste arquivo, você usou quatro constantes PHP para se conectar ao banco de dados MySQL que você criou no Passo 1:

      • DB_NAME esta constante contém o nome do banco de dados test_company.

      • DB_USER: esta variável contém o nome de usuário test_user.

      • DB_PASSWORD : esta constante armazena a PASSWORD MySQL da conta do test_user.

      • DB_HOST: isso representa o servidor onde o banco de dados está. Neste caso, você está usando o servidor localhost.

      A seguinte linha em seu arquivo inicia um PHP Data Object (PDO) e se conecta ao banco de dados MySQL:

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

      Perto do final do arquivo, você definiu alguns atributos PDO:

      • ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION: este atributo instrui o PDO a lançar uma exceção que pode ser logada para fins de depuração.
      • ATTR_EMULATE_PREPARES, false: esta opção aumenta a segurança ao informar ao o mecanismo de banco de dados do MySQL para fazer a preparação ao invés do PDO.

      Você incluirá o arquivo /var/www/html/config.php em dois scripts PHP que você criará a seguir para inserir e recuperar registros, respectivamente.

      Primeiro, crie o script PHP /var/www/html/insert_products.php para inserir registros na tabela products:

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

      Em seguida, adicione as seguintes informações no arquivo /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";
      

      Salve e feche o arquivo.

      No arquivo, você incluiu o arquivo config.php no topo. Este é o primeiro arquivo que você criou para definir as variáveis de banco de dados e se conectar ao banco de dados. O arquivo também inicia um objeto PDO e o armazena em uma variável $pdo.

      Em seguida, você criou uma matriz de dados dos produtos para serem inseridos no banco de dados. Além de product_name e price, que são preparados como strings e valores numéricos respectivamente, o script utiliza a função integrada do PHP file_get_contents para ler imagens de uma origem externa e as passar como strings para a coluna product_image.

      Em seguida, você preparou uma instrução SQL e usou a instrução PHP foreach{...} para inserir cada produto no banco de dados.

      Para executar o arquivo /var/www/html/insert_products.php execute-o na janela do seu navegador usando a seguinte URL. Lembre-se de substituir your-server-IP pelo endereço IP público do seu servidor:

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

      Após executar o arquivo, você verá uma mensagem de sucesso em seu navegador, confirmando que os registros foram inseridos no banco de dados.

      Uma mensagem mostrando que os registros foram inseridos com sucesso no banco de dados

      Você inseriu com sucesso três registros contendo imagens de produtos na tabela products. No próximo passo, você criará um script PHP para recuperar esses registros e exibi-los no seu navegador.

      Passo 3 — Exibindo Informações de Produtos do Banco de Dados MySQL

      Com as informações e imagens dos produtos no banco de dados, você agora irá programar outro script PHP que consulta e exibe informações dos produtos em uma tabela HTML no seu navegador.

      Para criar o arquivo, digite o seguinte:

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

      Em seguida, digite as seguintes informações no arquivo:

      /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>
      

      Salve as alterações no arquivo e feche-o.

      Aqui, você incluiu novamente o arquivo config.php para se conectar ao banco de dados. Em seguida, você preparou e executou uma instrução SQL usando o PDO para recuperar todos os itens da tabela products usando o comando SELECT * FROM products

      Depois, você criou uma tabela HTML e a preencheu com os dados dos produtos usando a instrução PHP while() {...}. A linha $row = $stmt->fetch(PDO::FETCH_ASSOC) consulta o banco de dados e armazena o resultado na variável $row como uma matriz multidimensional, que você então exibiu em uma coluna de tabela HTML usando a sintaxe $row['column_name'].

      As imagens da coluna product_image são incluídas dentro das tags <img src = "">. Você usou os atributos width e height para redimensionar as imagens para um tamanho menor que pode se encaixar na coluna HTML.

      Para converter os dados mantidos pelo tipo de dados BLOB de volta para imagens, você usou a função PHP integrada base64_encode e a seguinte sintaxe para o esquema Data URI:

      data:media_type;base64, base_64_encoded_data
      

      Neste caso, o image/png é o media_type e a string codificada em Base64 da coluna product_image é o base_64_encoded_data.

      Em seguida, execute o arquivo display_products.php em um navegador web digitando o seguinte endereço:

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

      Após executar o arquivo display_products.php em seu navegador, você verá uma tabela HTML com uma lista de produtos e imagens associadas.

      List of products from MySQL database

      Isso confirma que o script PHP para recuperar imagens do MySQL está funcionando como esperado.

      Conclusão

      Neste guia, você utilizou o tipo de dados MySQL BLOB para armazenar e exibir imagens com PHP no Ubuntu 18.04. Você também viu as vantagens básicas de armazenar imagens em um banco de dados, ao invés de armazená-las em um sistema de arquivos. Elas incluem a portabilidade, segurança e facilidade de backup. Se você estiver construindo uma aplicação como um portal de estudantes ou o banco de dados de funcionários que exige que informações e imagens relacionadas sejam armazenadas em conjunto, então essa tecnologia pode ser de grande uso para você.

      Para obter mais informações sobre os tipos de dados suportados no MySQL, siga o guia MySQL Data Types. Se você estiver interessado em mais conteúdos relacionados ao MySQL e ao PHP, verifique os seguintes tutoriais:



      Source link