Para iniciar vamos montar a estrutura inicial de nosso site. Nesse exemplo vamos criar uma pasta public que conterá os arquivos públicos de nosso sistema. Em um nível abaixo vamos criar um arquivo que conterá as instruções de servidor em PHP. O objetivo desse arquivo é ficar mantido em um local no servidor sem acesso para o usuário.
Podemos incluir esse arquivo no nosso arquivo principal de duas formas: com o include que em caso de erro retorna apenas um warning ou com o require que em caso de falha gera um Fatal Error. Como esse arquivo é vital para a aplicação o idel é que ele seja incluido com o require.
Uma outra dica é utilizar para o caminho do arquivo a constante __DIR__ concatenada com o caminho relativo do arquivo a ser incluido. Essa constante retorna o diretório completo onde está sendo executado o arquivo que está acessando o link.
Para rodar o PHP server (sem a necessidade do XAMPP) executamos o servidor do PHP com o comando abaixo executado na pasta do projeto:
$ php -S localhost:8000 -t public/
Onde:
-S addr:port - Run with built-in web server
-t docroot - Specify document root docroot for built-in web server.
Em seguida analisamos a variável global $_SERVER com o var_dump(). Ao analisar essa variável verificamos que ela tem alguns atributos que indicam o caminho da URL. São eles:
['REQUEST_URI'], ['PATH_INFO'] e ['PHP_SELF'].
Com o atributo ['PATH_INFO'] podemos verificar qual o parametro que está sendo passado para o servidor. Com isso podemos indicar o caminho dos arquivos (mesmo sem eles estarem na árvore de arquivos) de acordo com palavras amigáveis (sem o uso de extensões) deixando os arquivos do site também em um diretório fora da pasta public. Fizemos isso inicialmente de modo 'hard code'.
Abaixo como fazer a substituição dos arquivos pelo PATH_INFO:
$path = $_SERVER['PATH_INFO'] ?? '/';
if ($path == '/') {
require __DIR__ . '/site/routes.php';
} elseif ($path == '/contato') {
require __DIR__ . '/site/contato.php';
} else {
echo 'Página não encontrada';
}
Devemos verificar os PATHs do sistema e a estrutura de pastas
públicas. O caminho pode variar também conforme o servidor que
está sendo executado. Estou executando essas aulas com o XAMPP e
com o PHP server (esse na porta localhost:8081).
if ($path == '/') {
require __DIR__ . '/site/routes.php';
} elseif ($path == '/contato') {
require __DIR__ . '/site/contato.php';
} else {
echo 'Página não encontrada';
}