PHP não é só para web
\n\nQuando se fala em "PHP", a maioria das pessoas pensa em feeds de redes sociais, carrinhos de compras ou o backend do WordPress. Isso é natural: a linguagem nasceu como uma ferramenta para a web. Mas e se eu te dissesse que o PHP também é excelente para tarefas que geralmente são delegadas ao Python, Bash ou Go? Estou falando de desenvolvimento multiplataforma em PHP — criar utilitários que funcionam no Windows, Linux e macOS sem precisar reescrever o código.
\n\nNeste artigo, não vamos ensinar você a criar formulários. Vamos mostrar como escrever um gerenciador de arquivos de console, um parser de logs e um sistema de monitoramento de pastas — tudo isso em PHP puro, sem um único servidor web. Você aprenderá a contornar as armadilhas de diferentes sistemas operacionais e a escrever código que roda de forma idêntica em qualquer lugar.
\n\nPronto? Então abra o terminal e prepare-se para se surpreender com as capacidades do bom e velho PHP.
\n\nPor que PHP para tarefas multiplataforma? Três argumentos de peso
\n\nAntes de mergulharmos no código, vamos entender por que usar PHP para utilitários de desktop e servidor. O Python tem Django e Flask, o Node.js tem Express. Por que escolher o PHP?
\n\n- \n
- Disponibilidade generalizada. O PHP está instalado em quase toda hospedagem compartilhada e em 80% dos servidores do mundo. Se você está criando uma ferramenta de administração, é bem provável que o PHP já esteja na máquina de destino. Sem necessidade de instalar um runtime adicional. \n
- Baixa barreira de entrada para desenvolvedores web. Você já conhece a sintaxe, as funções de manipulação de strings e arrays. Não precisa aprender uma nova linguagem para automatizar tarefas rotineiras no servidor. \n
- Biblioteca padrão robusta. O PHP tem tudo para trabalhar com arquivos, processos, sockets de rede e arquivos zip. E extensões PECL como
paralleloupthreadsadicionam suporte a multithreading. \n
Claro, o PHP não é ideal para aplicações com interface gráfica (embora exista o PHP-GTK). Mas para utilitários de console e daemons, é uma ferramenta madura e estável. Vamos ver como escrever esse código da maneira correta.
\n\nFundamentos do código PHP multiplataforma
\n\nA primeira coisa a lembrar: separadores de caminho. No Linux é /, no Windows é \\. O PHP fornece a constante DIRECTORY_SEPARATOR, mas é ainda mais prático usar a função DIRECTORY_SEPARATOR ou a barra universal / — o Windows a entende perfeitamente desde o PHP 7+.
Trabalhando corretamente com caminhos
\n\n<?php\n// Ruim — barra fixa no código\n$path = '/var/log/errors.log'; // Vai falhar no Windows\n\n// Bom — usando DIRECTORY_SEPARATOR\n$path = 'var' . DIRECTORY_SEPARATOR . 'log' . DIRECTORY_SEPARATOR . 'errors.log';\n\n// Ótimo — usando / e realpath()\n$path = __DIR__ . '/logs/errors.log';\necho $path; // Funciona em ambos os SOs\n?>\n\n\nO segundo ponto importante é a codificação. No Windows, o console geralmente usa CP866, enquanto os scripts PHP estão em UTF-8. Para exibir caracteres acentuados no Windows, use a função mb_convert_encoding() ou defina a codificação com chcp 65001 no início do script.
Exemplo: leitura de arquivo multiplataforma
\n\n<?php\nfunction readLogFile(string $filename): string {\n // Verifica se o arquivo existe\n if (!file_exists($filename)) {\n throw new RuntimeException("Arquivo $filename não encontrado");\n }\n \n // Lê o conteúdo\n $content = file_get_contents($filename);\n \n // Detecta o SO e converte a codificação para exibição\n if (PHP_OS_FAMILY === 'Windows') {\n $content = mb_convert_encoding($content, 'CP866', 'UTF-8');\n }\n \n return $content;\n}\n\necho readLogFile('logs/app.log');\n?>\n\n\nCriando um utilitário real: monitoramento de alterações em pastas
\n\nVamos escrever algo útil — um script que monitora uma pasta e ex