PHP não é apenas web: por que seu próximo utilitário CLI deve ser escrito em PHP
Quando ouvimos "PHP", a primeira associação são sites, WordPress e infinitos echo no navegador. Mas o PHP é um verdadeiro canivete suíço para o desenvolvedor. Um de seus recursos mais subestimados é a capacidade de criar utilitários CLI completos em PHP. Sim, aqueles programas de console que ajudam a automatizar tarefas rotineiras, analisar logs, gerar relatórios e tornar a vida do engenheiro DevOps um pouco mais fácil.
Neste artigo, não vamos apenas falar de teoria. Vamos pegar e escrever do zero vários aplicativos de console reais em PHP. Você aprenderá como processar argumentos de linha de comando, colorir a saída, mostrar barras de progresso e até criar menus interativos. Ao final do artigo, você terá um modelo pronto que pode usar imediatamente em seus projetos.
Por que PHP para CLI? 3 argumentos convincentes
Antes de mergulhar no código, vamos entender por que usar PHP para criar utilitários CLI. Afinal, existem Python, Node.js, Go…
- Você já conhece PHP. Se você é um desenvolvedor web PHP, não precisa aprender uma nova sintaxe para escrever um script de backup de banco de dados ou deploy.
- Ecossistema unificado. Você pode usar as mesmas bibliotecas (via Composer), os mesmos ORMs e os mesmos template engines. Quer um script que gere um relatório PDF a partir do banco de dados? Sem problemas.
- Velocidade de desenvolvimento. Scripts PHP são escritos muito rapidamente. Para utilitários simples, esta é a opção ideal — não precisa compilar, configurar ambiente, é só executar e pronto.
Claro, para daemons de alta carga ou utilitários de sistema complexos, é melhor usar C ou Rust. Mas para 90% das tarefas do dia a dia, o PHP é perfeitamente adequado.
Do zero ao primeiro utilitário CLI: hello, world! no terminal
Vamos começar com o mais simples. Crie um arquivo hello.php e escreva:
#!/usr/bin/env php<?php
echo "Olá, terminal!";A primeira linha é o shebang. Ela diz ao sistema que este arquivo deve ser executado com PHP. Sem ela, você teria que escrever php hello.php toda vez, e com ela, apenas ./hello.php.
Não se esqueça de dar permissão de execução ao arquivo:
chmod +x hello.phpAgora execute:
./hello.phpParabéns! Você acabou de criar seu primeiro utilitário CLI em PHP. É incrivelmente simples, não é?
Trabalhando com argumentos: tornando o utilitário útil
Qualquer programa de console sério deve ser capaz de aceitar argumentos. O PHP fornece dois arrays superglobais para isso: $argv e $argc.
$argv— array de argumentos. O primeiro elemento é o nome do script.$argc— número de argumentos.
Vamos escrever uma calculadora simples — somar dois números passados como argumentos.
Calculadora simples em PHP CLI
#!/usr/bin/env php<?php
if ($argc !== 3) { echo "Uso: {$argv[0]} <número1> <número2>"; exit(1);}
$a = (int)$argv[1];$b = (int)$argv[2];
echo "Soma: " . ($a + $b) . "";echo "Diferença: " . ($a - $b) . "";echo "Produto: " . ($a * $b) . "";echo "Quociente: " . ($a / $b) . "";Executamos:
./calc.php 10 5Saída:
Soma: 15Diferença: 5Produto: 50Quociente: 2Mas isso é muito primitivo. Em projetos reais, são necessários argumentos nomeados (flags), como em git commit -m "mensagem". Para isso, o PHP tem a função getopt().
Argumentos nomeados com getopt()
#!/usr/bin/env php<?php
$shortOptions = "u