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:
Resultado no arquivo php criado para testar a execução do PHP 8 com Nginx
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.
Procure no menu iniciar por: Agendador de Tarefas
Na tela inicial do programa, no painel Ações clique em Criar Tarefa...
Tela inicial do Agendador de Tarefas do Windows 10
Deverá abrir a tela abaixo:
Tela Criar Tarefa
Nesta tela você poderá definir um nome e descrever esta tarefa para fácil identificação posterior.
Clique na aba Ações.
Aba Ações da tela Criar Tarefa
Clique no botão Novo... para adicionar uma nova ação.
Tela Nova Ação
Na tela Nova Ação clique em Procurar para localizar o arquivo nginx-start.bat
Procure e selecionar 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.