Neste artigo vamos mostrar como configurar o PHP 8 no Windows 10 usando NGINX e dicas opcionais para facilitar a inicialização, paralização e reinicialização dos executáveis.
Downloads
Para este tutorial usamos as seguintes versões:
PHP 8.0.0 VS16 x64 Non Thread Safe (2020-Nov-24 22:43:38)
https://windows.php.net/downloads/releases/php-8.0.0-nts-Win32-vs16-x64.zip
(Caso queira verificar novas versões ou fazer o download para x86 acesse: https://windows.php.net/download/)
NGINX 1.18.0
https://nginx.org/download/nginx-1.18.0.zip
(Caso queira verificar novas versões acesse: https://nginx.org/en/download.html)
RunHiddenConsole
Este software será usado caso você queira configurar a inicialização automática do PHP FastCGI e Nginx.
https://redmine.lighttpd.net/attachments/download/660/RunHiddenConsole.zip
PHP 8 NTS
Após fazer o download do arquivo php-8.0.0-nts-Win32-vs16-x64.zip extraia em uma pasta. Recomendamos usar uma localização fácil como C:\PHP por exemplo. Nas configurações que mostraremos usaremos como base este caminho para a localização dos binários do PHP 8, caso você escolha salvar em outra localização, lembre-se de fazer os ajustes necessários.
Localize o arquivo php.ini-development e renomeie para php.ini uma vez que os binários do PHP irão procurar este arquivo onde deve conter as configurações.
As linhas que tiverem ponto e vírgula (;) significa que está comentada e não será lida como uma configuração. Toda vez que precisarmos habilitar ou alterar o valor de alguma diretiva de configuração, certifique-se de que a linha não está iniciando com o caractere de ponto e vírgula.
Localize a diretiva error_reporting e habilite todos os erros com exceção das notícias e estritos.
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT
A próxima diretiva é a doc_root, onde iremos definir o diretório raíz. Essa é uma configuração necessária para executar o PHP 8 com FastCGI no Nginx. Para este exemplos estamos apontando para um diretório chamado www na unidade C. Caso você não tenha, é preciso criar ou então configurar outro diretório.
doc_root = "C:\www"
Agora precisamos informar para o PHP onde está localizada a pasta com as extensões, ou arquivos DLL. Para isso remova o comentário da diretiva extension_dir com o valor "ext".
extension_dir = "ext"
Logo abaixo você verá mais uma diretiva que precisaremos alterar, chamada sys_temp_dir. Deverá informar o caminho do diretório temporário do Windows.
sys_temp_dir = "C:\Windows\Temp"
À partir da linha 920 teremos as extensões disponíveis para serem habilitadas de acordo com a sua necessidade. Por exemplo, caso deseje usar o banco de dado MySQL deverá habilitar a extensão mysqli e/ou pdo_mysql.
Neste tutorial habilitamos as seguintes extensões:
extension=curl
extension=fileinfo
extension=mbstring
extension=exif
extension=mysqli
extension=openssl
extension=pdo_mysql
Uma das novidades mais aguardadas da versão 8 do PHP é o JIT (Just In Time). E para habilitarmos está opção é necessário configurar as seguintes diretivas:
pcre.jit=1
Para executar o PHP 8 com FastCGI basta executar o comando abaixo:
C:\PHP\NTS\php-cgi.exe -b 127.0.0.1:9000
Este comando não irá retornar nada se tudo estiver certo, porém irá bloquear o terminal enquanto o PHP estiver em execução.
Agora podemos configurar o Nginx que deverá olhar para este servidor local na porta 9000 com PHP 8.
Nginx 1.18
Extraia os arquivos do arquivo compactado nginx-1.18.0.zip para o diretório C:\NGINX.
Vamos editar algumas configurações no arquivo nginx.conf que está no diretório conf da pasta C:\NGINX.
Neste arquivo os comentários são definidos pelo caractere hashtag (#). Então para habilitar uma diretiva é preciso remover estes comentários.
Na linha 43 temos o inicio do bloco de configuração do location / da seguinte forma:
location / {
root html;
index index.html index.html;
}
Vamos alterar o diretório root para apontar para o mesmo diretório que configuramos no php.ini e adicionar o arquivo index.php como sendo uma das possibilidades de arquivo padrão.
location / {
root "C:\www";
index index.php index.html index.html;
}
Agora à partir da linha 65 até a linha 71 temos um exemplo de configuração do PHP. Podemos usar como base removendo os comentários e fazendo algumas pequenas modificações.
De inicio o arquivo estará assim:
#location ~\.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fast_cgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
Após remover os comentários e fazer as modificações o bloco de configuração ficará assim:
location ~\.php$ {
root "C:\www";
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Veja que alteramos o root para o diretório C:\www e na linha da configuração fastcgi_param trocamos o /scripts por $document_root.
Agora para iniciar o servidor Nginx basta chamar o executável nginx.exe que está no diretório C:\NGINX com o seguinte comando:
C:\NGINX\nginx.exe
Desde que não tenha nenhum serviço executando na porta 80 este comando fará com que o servidor nginx inicie e olhe para o PHP 8 com FastCGI que está rodando na porta 9000.
Neste momento você poderá testar criando um arquivo php na pasta C:\www como o exemplo abaixo:
<?php
phpinfo();
E depois no navegador abra o endereço: http://localhost
Deverá ter o resultado abaixo:
Porém se fechar os terminais ou reiniciar o computador precisará iniciar o php e o nginx novamente. Caso queira configurar de modo automático poderá criar um arquivo bat e configurar como uma tarefa agendada do Windows 10.
Criando Arquivos .BAT
Arquivo nginx-start.bat para iniciar os serviços:
@ECHO OFF
PUSHD "C:\NGINX"
ECHO Iniciando o PHP 8 com FastCGI...
RunHiddenConsole.exe "C:\PHP\php-cgi.exe" -b 127.0.0.1:9000
ECHO Iniciando o Nginx...
RunHiddenConsole.exe "C:\NGINX\nginx.exe"
POPD
EXIT /b
Arquivo nginx-stop.bat para parar os serviços:
@ECHO OFF
TASKKILL /f /IM nginx.exe
TASKKILL /f /IM php-cgi.exe
EXIT /b
Arquivo nginx-restart.bat para reiniciar os serviços:
@ECHO OFF
CALL nginx-stop.bat
CALL nginx-start.bat
EXIT /b
Agora você poderá fechar os terminais e apenas clicar nos arquivos .bat para executar a ação desejada.
Mas vamos agendar a inicialização automática por meio do Agendador de Tarefas do Windows 10.
Na tela inicial do programa, no painel Ações clique em Criar Tarefa...
Deverá abrir a tela abaixo:
Nesta tela você poderá definir um nome e descrever esta tarefa para fácil identificação posterior.
Clique na aba Ações.
Clique no botão Novo... para adicionar uma nova ação.
Na tela Nova Ação clique em Procurar para localizar o arquivo nginx-start.bat
Clique em Abrir e depois em OK nas telas que estão abertas para salvar a ação e a tarefa agendada.
Pronto, agora toda vez que o computador iniciar e a porta 80 estiver liberada o serviço do Nginx com PHP 8 FastCGI serão iniciados automaticamente.