Como usar o servidor nativo do PHP

Como usar o servidor nativo do PHP 5.4

Até o PHP 5.3, era necessário instalar um Servidor Web, como o Apache, Nginx ou IIS, para executar scripts PHP pelo navegador.

Em ambientes de desenvolvimento, onde há, em geral, apenas um usuário fazendo requisições HTTP para os testes, é um exagero rodar Apache para isso. É como matar formiga com canhão.

Felizmente, a partir do PHP 5.4, há um servidor nativo para testes locais. Assim, não é necessário instalar um servidor web em seu ambiente de desenvolvimento.

Vale lembrar que esse é um servidor simples, monothread, apenas para testes. Não o utilize em ambientes de produção!

Tendo o PHP 5.4, instalado, vá até o diretório onde deseja executar o servidor (raiz do seu projeto web), e executar no Terminal (Console, Prompt ou seja lá como queira chamá-lo) o seguinte comando:

cd diretorio/do/seu/projeto/web
php -S localhost:8080

localhost é o endereço. Pode ser um IP (127.0.0.1, por exemplo) ou um hostname, como localhost. A porta pode ser qualquer porta livre. Usei 8080 como exemplo, mas poderia ser a própria porta 80, desde você tenha permissão para usar portas abaixo de 1024 (é necessário ser root para isso).

Após isso, pode acessar o endereço http://localhost:8080 em seu navegador, e verá seus arquivos. Para encerrar o servidor, basta digitar, no terminal, CTRL+C.

Esse servidor não possui suporte a Mod Rewrite, então não é possível usar .htaccess, como no Apache ou no Nginx.

Porém existe uma forma de obter o mesmo comportamento. Basta usar um arquivo de rotas.

Crie o arquivo route.php (ou outro nome que preferir) com este conteúdo:

<?php
 
if (preg_match('/\.(?:png|jpg|jpeg|gif)$/', $_SERVER["REQUEST_URI"])) {
    // exibe o arquivo requisitado
    return false;
}
else
{
    // exibe sempre a index.php
    include __DIR__ . '/index.php';
}

Isso fará com que todas as requisições (exceto imagens) sejam enviadas para o arquivo index.php.

Depois basta iniciar o servidor chamando o arquivo de rotas:

php -S localhost:8000 route.php
  • Fiz os testes no servidor built-in do PHP logo que a versão 5.4 foi lançada com essa novidade.
    Gostei bastante do serviço por ser rápido no response e consumir poucos recursos da máquina.
    Além disso aceita muito bem rewrites.

    • Ronaldo

      Beraldo, eu tentei usar o mod_rewrite com o servidor nativo, mas não está funcionando.

      Segue meu exemplo:
      criei um arquivo php chamado teste.phpm segue código fonte abaixo:

      Criei o .htaccess, segue abaixo:

      RewriteEngine On
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

      Sendo que, quando digito: localhost/categorias, era para imprimir categorias, porém não imprime nada.
      O que estou fazendo de errado?

      • Olá, Ronaldo

        O servidor nativo não lê o .htaccess. É necessário passar um arquivo de rotas, como este:

        if (preg_match(‘/\.(?:png|jpg|jpeg|gif)$/’, $_SERVER[“REQUEST_URI”])) {
        return false;
        }
        else
        {
        include __DIR__ . ‘/index.php’;
        }

        Depois inicie o servidor:

        php -S localhost:8000 route.php

        Atualizei o post com essa informação. Dê uma olhada ;)

        Abraço

  • Danilo

    Cara, muito bom o post! Desconhecia dessa opção.
    Só corrigindo ali, pra parar no Windows, é Ctrl+C, também :)

    • Obrigado pela correção, Danilo. Já arrumei o post.

      CTRL+Z no Windows é End-Of-File, o mesmo que CTRL+D em Unix-Like. Eu me confundi na hora de escrever, mesmo. :)

  • Guilherme

    Não entendi direito como usar o servidor nativo do PHP no windows. Preciso baixar o php para windows e usar, só isso?
    Aparentemente fiz tudo como está no post, mas não deu certo.

    • Por que não deu certo? O que ocorreu? Deu erro? Se sim, qual?
      Não testei no Windows, mas conheço quem já testou e funcionou corretamente.

  • Tiago

    Ótimo “post”. Funcionou perfeitamente no meu linux.

  • Pingback: As Diferentes Formas de Execução do PHP - Blog do Beraldo()

  • Pingback: 6 Dicas Para Estudar PHP Do Jeito Certo - Profissionais TI()

  • Pingback: Composer: o gerenciador de dependências para PHP()

  • Pingback: Composer: Gerenciamento Ágil de Dependências com PHP()

  • Pingback: URLs Amigáveis Sem .htaccess Usando Slim()

  • Pingback: Sistema de Cadastro com PHP e Laravel Em 1 Minuto()

  • Pingback: MVC: Uma Estrutura Básica Com PHP Orientado a Objetos()