Como testar rapidamente sites com o servidor Web embutido do PHP


0

Precisa iniciar rapidamente um servidor web para testar um aplicativo PHP? O interpretador PHP tem um built-in! Você pode usar isso para inspecionar rapidamente seu trabalho sem executar Apache, NGINX ou uma solução de conteinerização.

O servidor integrado do PHP recebe relativamente pouca atenção, mas é bastante poderoso para fins de desenvolvimento. Neste guia, mostraremos como você pode usá-lo como alternativa a outros micro-servidores como o SimpleHTTPServer do Python ou o pacote http-server npm, nenhum dos quais pode executar scripts PHP.

Usando o servidor integrado

O servidor integrado é um mecanismo de conveniência para ajudá-lo a testar sites PHP em ambientes que não possuem um servidor HTTP completo. Está disponível no PHP 5.4 e em todas as versões posteriores. Você pode executá-lo diretamente do seu diretório de trabalho sem precisar configurar um host virtual primeiro.

Antes de usar o servidor, esteja avisado de que ele foi projetado apenas para uso em desenvolvimento. A documentação do PHP adverte explicitamente contra a implantação deste servidor na frente de aplicativos de produção. Não é suficientemente seguro para ser exposto em redes publicamente acessíveis.

Iniciando o servidor

O servidor é iniciado passando o -S bandeira para o php executável:

$ php -S localhost:8080
[Fri Jun 10 16:00:00 2022] PHP 8.1.5 Development Server (http://localhost:8080) started

O argumento dado ao comando especifica o endereço de escuta do servidor. Nós usamos a porta 8080 sobre localhost no exemplo acima. Agora você pode visitar http://localhost:8080 em seu navegador da web para acessar o conteúdo em seu diretório de trabalho. Quaisquer scripts PHP serão executados automaticamente quando você os solicitar.

Você pode servir um caminho que está fora do seu diretório de trabalho definindo o -t sinalizar ao iniciar o servidor:

$ php -S localhost:8080 -t /home/$USER/public_docs

A raiz do documento agora será /public_docs dentro de sua pasta pessoal.

Mantenha a janela do terminal aberta enquanto estiver usando o servidor web. Pressione Ctrl+C para encerrar o processo quando terminar de testar seu site. O PHP registrará cada solicitação recebida em sua janela de terminal, incluindo o URI e o método HTTP. Quaisquer erros PHP não detectados também aparecerão nos logs.

Habilitando o acesso remoto

Ouvindo localhost não permitirá conexões de entrada de outros dispositivos em sua rede. Você pode permitir o acesso remoto vinculando-se a 0.0.0.0 em vez de:

$ php -S 0.0.0.0:8080

Lembre-se de que o servidor não está protegido para uso em produção e não deve ser exposto publicamente. Permita acesso remoto apenas quando for absolutamente necessário, como ao testar um recurso específico em um dispositivo móvel. Verifique se a porta que você usa não está aberta para a Internet.

Solicitar correspondência de fallback

PHP irá procurar index.php e index.html arquivos na raiz do documento ativo quando a solicitação de entrada não possui um componente de URI. Se nenhum desses arquivos existir, o servidor continuará subindo na árvore de diretórios, procurando um índice em um dos pais da raiz do documento. Isso significa que você pode, sem querer, acabar servindo conteúdo que está fora do diretório que você especificou. Um status 404 Not Found será emitido quando o topo da árvore for alcançado sem que um arquivo de índice seja encontrado.

Solicitações que incluem um URI (como /file) deve corresponder exatamente a um arquivo estático na raiz do documento. Caso contrário, um 404 será devolvido. O PHP define automaticamente o Content-Type cabeçalho de resposta para o tipo MIME do arquivo servido para as extensões de arquivo mais populares.

Usando um script de roteador

Opcionalmente, você pode configurar o servidor web para chamar um script em cada solicitação. Isso permite que você use o front controller do seu aplicativo para executar roteamento dinâmico avançado.

A funcionalidade do roteador é habilitada fornecendo um nome de arquivo PHP na linha de comando quando você inicia o servidor:

$ php -S localhost:8080 router.php

O PHP agora usará router.php lidar todo pedido de entrada. Você pode rotear usuários para o ponto apropriado em seu aplicativo inspecionando o URI de solicitação:

if ($_SERVER["REQUEST_URI"] === "/dashboard") {
    require_once("dashboard.php");
}
else if ($_SERVER["REQUEST_URI"] === "/profile") {
    require_once("profile.php");
}
else {
    require_once("404.php");
}

A saída produzida pelo script do seu roteador se tornará a resposta enviada de volta ao cliente. Uma exceção é se o script retornar false: neste caso, o PHP retornará para retornar o arquivo estático que corresponde ao URI da solicitação original.

if (str_starts_with($_SERVER["REQUEST_URI"], "/api")) {
    // Route to the correct API endpoint
    // ... 
}
else {
    // Serve other routes statically
    return false;
}

Detectando o servidor interno do seu código PHP

Seu código PHP pode detectar se está sendo chamado pelo servidor web integrado inspecionando o nome da interface ativa. o php_sapi_name() função fornece esse valor. Será definido para cli-server quando o script foi chamado pelo componente do servidor integrado.

if (php_sapi_name() === "cli-server") {
    enable_development_mode();
}

Lidando com várias solicitações simultaneamente

O servidor assume como padrão a execução em um modo síncrono de processo único por padrão. As solicitações são tratadas individualmente e bloqueiam a execução umas das outras até serem concluídas. Esta é uma das razões pelas quais o servidor não é adequado para uso em produção.

O PHP 7.4 adicionou suporte para lidar com várias solicitações simultaneamente. Ele se baseia em fork() disponibilidade e não funciona no Windows. O servidor bifurcará um novo trabalhador para atender a cada solicitação recebida quando esse modo estiver ativado. Você pode ativá-lo configurando o PHP_CLI_SERVER_WORKERS variável de ambiente para o número de trabalhadores que você deseja:

$ PHP_CLI_SERVER_WORKERS=8 php -S localhost:8080

Esta funcionalidade ainda está marcada como experimental no PHP 8.1.

Resumo

O PHP possui um servidor web integrado que é uma maneira conveniente de testar seus aplicativos e expor rapidamente o conteúdo do sistema de arquivos local em sua rede local. Ele suporta execução de scripts PHP, roteamento catch-all e arquivos estáticos com os tipos MIME mais comuns.

Embora o servidor agora suporte um modo de bifurcação opcional, não é aconselhável usá-lo em produção. Destina-se a auxiliar o desenvolvimento e não possui os recursos de personalização e segurança necessários para suas implantações públicas. Onde se destaca é como uma alternativa leve e integrada às plataformas de desenvolvimento convencionais, como contêineres WAMP, XAMPP e Docker.


Like it? Share with your friends!

0

What's Your Reaction?

hate hate
0
hate
confused confused
0
confused
fail fail
0
fail
fun fun
0
fun
geeky geeky
0
geeky
love love
0
love
lol lol
0
lol
omg omg
0
omg
win win
0
win

0 Comments

Your email address will not be published. Required fields are marked *