GIT: Como voltar commits de forma segura e eficaz

Para voltar o versionamento para um commit anterior no Git, existem algumas abordagens que você pode seguir, dependendo da situação. Vou descrever dois métodos principais: usando o git reset e o git revert.

1. Usando git reset:

Este método reescreve o histórico do Git, portanto, tenha cuidado ao usá-lo, especialmente em repositórios compartilhados, pois ele pode causar problemas para outras pessoas.

# Volte para o commit desejado, descartando todos os commits posteriores

$ git reset --hard <hash_do_commit>

Substitua <hash_do_commit> pelo hash (SHA-1) do commit para o qual você deseja voltar. Isso descartará todos os commits posteriores e o HEAD do seu repositório apontará para o commit especificado.

2. Usando git revert:

Este método é mais seguro e é preferível em repositórios compartilhados, pois cria um novo commit que desfaz as alterações introduzidas pelo commit anterior. Isso não reescreve o histórico, apenas adiciona um novo commit.

# Crie um novo commit que desfaz as alterações do commit especificado

$ git revert <hash_do_commit>

Substitua <hash_do_commit> pelo hash do commit que você deseja desfazer. O Git criará um novo commit que desfaz as alterações introduzidas pelo commit especificado.

Lembre-se de que, ao usar qualquer um desses métodos, é sempre uma boa prática criar um backup ou cópia do seu repositório antes de realizar alterações significativas no histórico. Isso ajuda a evitar a perda acidental de dados.

PHP-FPM, o que é esse recurso para ambientes de produção?

O PHP-FPM (FastCGI Process Manager) é um gerenciador de processos para o PHP que oferece um desempenho significativamente melhor em comparação com o módulo do PHP para servidor web Apache. Ele é executado como um serviço separado do servidor web, o que o torna mais flexível e escalável. Neste artigo, exploraremos o que é o PHP-FPM, como ele funciona, suas vantagens e desvantagens e como configurá-lo.

O que é PHP-FPM?

O PHP-FPM é um gerenciador de processos FastCGI para o PHP. Ele foi criado para substituir o módulo do PHP para servidor web Apache, que não é muito eficiente em termos de desempenho e escalabilidade. O PHP-FPM é executado como um serviço separado do servidor web e é capaz de gerenciar vários processos PHP simultaneamente. Ele é compatível com a maioria dos servidores web, incluindo o Apache, o Nginx e o Lighttpd.

Como o PHP-FPM funciona?

O PHP-FPM é executado como um processo separado do servidor web e é responsável por gerenciar os processos PHP. Quando uma solicitação é recebida pelo servidor web, ela é enviada para o PHP-FPM. O PHP-FPM verifica se há um processo PHP disponível para lidar com a solicitação. Se houver, ele atribui a solicitação ao processo PHP e aguarda a resposta. Se não houver processo PHP disponível, ele inicia um novo processo.

O PHP-FPM usa um pool de processos para gerenciar os processos PHP. O tamanho do pool pode ser configurado no arquivo de configuração do PHP-FPM. O tamanho do pool determina o número máximo de processos PHP que o PHP-FPM pode executar simultaneamente. Se houver muitas solicitações para o servidor web, o PHP-FPM pode aumentar o tamanho do pool para lidar com a carga adicional.

O PHP-FPM também inclui recursos avançados de gerenciamento de processos, como limites de recursos, controle de acesso e balanceamento de carga.

Vantagens do PHP-FPM

O PHP-FPM oferece várias vantagens em relação ao módulo do PHP para servidor web Apache. Algumas dessas vantagens incluem:

Desempenho

O PHP-FPM é significativamente mais rápido e eficiente do que o módulo do PHP para servidor web Apache. Ele usa menos recursos do servidor e pode lidar com mais solicitações simultaneamente. Isso se traduz em tempos de carregamento mais rápidos para os usuários finais e um melhor desempenho geral do site.

Escalabilidade

O PHP-FPM é altamente escalável e pode lidar com cargas de trabalho pesadas sem afetar o desempenho. Ele pode ser configurado para iniciar automaticamente novos processos PHP conforme necessário e pode ajustar o tamanho do pool de processos para lidar com picos de tráfego.

Flexibilidade

O PHP-FPM é executado como um serviço separado do servidor web, o que o torna mais flexível em termos de configuração e gerenciamento. Ele pode ser facilmente integrado com vários servidores web, incluindo o Apache, o Nginx e o Lighttpd.

Recursos avançados de gerenciamento de processos

Esses recursos permitem que os administradores do servidor monitorem e gerenciem os processos PHP de forma mais eficaz, garantindo que o servidor esteja funcionando de maneira eficiente e segura.

Desvantagens do PHP-FPM

Embora o PHP-FPM ofereça muitas vantagens, também existem algumas desvantagens que precisam ser consideradas:

Mais configurações

A configuração do PHP-FPM pode ser complexa, especialmente se você não está familiarizado com o servidor web que está usando. É importante entender como o PHP-FPM funciona e como configurá-lo corretamente para evitar problemas de desempenho ou segurança.

Consumo de recursos

Embora o PHP-FPM use menos recursos do servidor do que o módulo do PHP para servidor web Apache, ainda pode consumir uma quantidade significativa de recursos em servidores com recursos limitados. Certifique-se de que o servidor tenha recursos suficientes para executar o PHP-FPM com eficiência.

Falta de suporte para alguns servidores web

Embora o PHP-FPM seja compatível com a maioria dos servidores web, alguns servidores web podem não ser compatíveis com o PHP-FPM ou exigir configurações adicionais. Certifique-se de verificar se o servidor web que você está usando é compatível com o PHP-FPM antes de configurá-lo.

Configurando o PHP-FPM

Existem várias etapas que você pode seguir para configurá-lo corretamente:

  1. Instale o PHP-FPM no seu servidor. Dependendo do seu sistema operacional, você pode usar o gerenciador de pacotes do sistema ou instalar manualmente.
  2. Edite o arquivo de configuração do PHP-FPM. O arquivo de configuração está localizado em /etc/php-fpm.conf ou /etc/php/7.x/fpm/pool.d/www.conf (dependendo da versão do PHP-FPM que você está usando). Edite o arquivo de acordo com suas necessidades, como ajustar o tamanho do pool de processos ou definir limites de recursos.
  3. Reinicie o serviço do PHP-FPM. Depois de fazer as alterações no arquivo de configuração, você precisará reiniciar o serviço do PHP-FPM para que as alterações entrem em vigor.
  4. Configure seu servidor web para usar o PHP-FPM. Dependendo do servidor web que você está usando, as etapas para configurá-lo podem variar. Você precisará configurar o servidor web para enviar solicitações para o PHP-FPM e receber as respostas.

Conclusão

O PHP-FPM é uma excelente opção para quem procura melhorar o desempenho e a escalabilidade do PHP em seus servidores web. Ele oferece muitas vantagens em relação ao módulo do PHP para servidor web Apache, incluindo melhor desempenho, escalabilidade e flexibilidade.

Embora a configuração possa ser complexa e haja algumas desvantagens a serem consideradas, o PHP-FPM é uma escolha sólida para quem procura melhorar a experiência do usuário final e garantir que seus sites estejam funcionando com eficiência.

PHP Swoole x PHP-FPM

O PHP Swoole e o PHP-FPM são duas tecnologias diferentes que servem propósitos diferentes na execução de aplicações PHP.

O PHP-FPM (FastCGI Process Manager) é um módulo de processamento de script que permite que aplicações PHP sejam executadas de forma eficiente e escalável em servidores web, como o Nginx ou Apache.

O PHP-FPM cria processos filhos para lidar com solicitações HTTP e as distribui entre esses processos, garantindo que não haja sobrecarga em um único processo.

Já o PHP Swoole é uma biblioteca de extensão do PHP que fornece funcionalidades de programação de rede e de servidor de eventos.

Ele permite que você crie aplicações de servidor com suporte a vários protocolos, incluindo HTTP, WebSocket, e outros. Além disso, ele oferece uma série de recursos avançados, como gerenciamento de conexões, escalabilidade, tempo real, entre outros.

A vantagem de usar o PHP Swoole em vez do PHP-FPM é que ele permite que você crie aplicações de servidor de alto desempenho e escaláveis sem depender de um servidor web. Além disso, o PHP Swoole suporta programação assíncrona e eventos, o que permite que as aplicações respondam rapidamente a várias solicitações simultaneamente, sem bloquear ou atrasar as outras.

No entanto, é importante lembrar que o PHP Swoole é uma tecnologia mais avançada e pode ser mais complexo de configurar e gerenciar do que o PHP-FPM. Além disso, nem todas as aplicações PHP precisam de recursos avançados de programação de rede e de servidor de eventos, e o PHP-FPM pode ser uma escolha mais adequada para aplicações menos complexas ou com requisitos de desempenho menos rigorosos.

Benchmark

Os benchmarks entre PHP-FPM e PHP Swoole variam dependendo do tipo de aplicação que está sendo executada e dos recursos específicos que estão sendo usados.

No entanto, em geral, o PHP Swoole tende a ser mais rápido e escalável do que o PHP-FPM em aplicações que requerem processamento de rede ou de eventos em tempo real.

Isso ocorre porque o PHP Swoole foi projetado especificamente para oferecer alta performance em aplicações de servidor, enquanto o PHP-FPM foi projetado para ser uma solução geral para a execução de aplicações PHP em servidores web.

O PHP Swoole utiliza uma abordagem de coroutines para gerenciar conexões, o que significa que ele pode lidar com muitas solicitações simultaneamente sem bloquear ou atrasar as outras. Além disso, ele suporta programação assíncrona, o que permite que as aplicações respondam rapidamente a várias solicitações ao mesmo tempo.

Em resumo, a escolha entre o PHP-FPM e o PHP Swoole depende dos requisitos específicos da aplicação e da equipe de desenvolvimento. É importante avaliar cuidadosamente os recursos e as considerações de desempenho antes de escolher a tecnologia certa para sua aplicação.

PHP TDD: Como fazer desenvolvimento focado em testes

Se você está procurando um conteúdo sobre testes automatizados com PHP, com PHPunit e TDD, vai encontrar aqui um pouco sobre o assunto. Espero que ajude você.

O que são testes

Todo projeto com expectativa de “ser grande”, precisa começar com a criação dos testes automatizados no desenvolvimento.

Executar testes manualmente são uma das tarefas mais repetitivas na vida do desenvolvedor. Todo mundo passa por isso de escrever o código e atualizar o navegador, para ver o código está correto.

O que poucos acabam se aprofundando no assunto, é que você não precisa Xampp, Wamp, Apache e etc para executar um código em PHP e validar se o mesmo está funcionando.

Para pequenos projetos, esse processo até pode ser tranquilo, digamos que fácil de ser executado. São casos de blogs em WordPress ou pequenos sites institucionais.

Para grandes projetos, chegará o momento de ser impossível testar todas as funcionalidades do sistema a cada nova atualização.

Um exemplo básico de testes de uma funcionalidade de login
Um exemplo básico de testes de uma funcionalidade de login.

O que é TDD

Um dos padrões mais adotados é o TDD. Esse padrão que é uma sigla de test-driven development, que ajuda muito na vida de grandes projetos, pois antes de começar qualquer desenvolvimento, você irá pensar no que é necessário testar.

Pois, isso sempre é o pensamento, talvez até já seja o processo ao criar “checklists” para depois de cada alteração, lembrar o que é necessário testar.

Executar o desenvolvimento, com o padrão TDD, facilita muito a vida pois você irá mapear todos os processos e já criar os testes, antes de começar o desenvolvimento.

Quando usar TDD

É possível criar os testes automatizados, já com o trablho pronto.

Este não é um processo muito amigável no longo prazo. O ideal é que antes de começar o desenvolvimento você já pare e pense no que será necessário.

Como falar anteriormente pequenos projetos podem não ter tanta necessidade de testes automatizados, pois são poucas coisas para se testar.

Agora, grandes projetos você não terá como controlar quais dependências tiveram alterações, se outra equipe de desenvolvimento fez modificações que impactam no seu feature, e não será possível testar todo o código em pouco tempo.

Os benefícios do TDD

O benefício de se usar testes automatizados, é que a partir de um momento que o projeto tem uma grande escala, você poderá executar um comando no terminal e esperar para ver qual foi o impacto da alteração.

Você terá um ganho em produtividade, pois ao invés de ter que ficar trocando de janelas, executando diversas atualizações de navegador e confiando que passou por todo o processo, um só comando é necessário para tudo isso ser executado e o resultado aparecer na tela.

O processo de deploy também é muito mais fácil, podendo ligar ferramentas de controle de qualidade que irão fazer todos os testes quando qualquer membro da equipe executar um push para o versionamento.

Como usar

O principal framework para fazer testes no PHP, é o PHPUnit.

Praticamente todas as distribuições de frameworks usadas hoje no PHP já vem com esse package pré-instalado.

 

Redirecionando HTTP para HTTPS

Se você deseja forçar os acessos de um ambiente para https, pode utilizar o script abaixo.

Ele é de fácil adaptação para qualquer aplicação. Lembre-se, como trabalhamos com a função, ele deverá ser uma das chamadas da requisição.

Caso o browser tenha algum output antes de usar essa função, irá imprimir o erro “Erro: “Cannot modify header information – headers already sent” no PHP“.

<?php

if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'
    || $_SERVER['SERVER_PORT'] == 443) {
    $params = (!empty($_SERVER['REQUEST_URI'])) ? '?' . $_SERVER['REQUEST_URI'] : '';
    header( 'Location: https://' . $_SERVER['HTTP_HOST'] . $params );
}