# Atualizar o PHP no Windows

> Atualizar o PHP no Windows: escolher a variante certa, verificar o download por SHA-256, aproveitar o php.ini e ter em conta o modo módulo do Apache contra o PHP2Shell.

Fonte: https://phpsos.de/pt/blog/php-unter-windows-aktualisieren/  
Atualizado em: 25/10/2026  
Prestador: PHP SOS, Assistência de emergência PHP e segurança de servidores. Ajuda imediata por WhatsApp: https://wa.me/491736494914?text=Ol%C3%A1%2C%20PHP%20SOS%2C%20precisamos%20de%20ajuda%20com%20o%20nosso%20servidor%20PHP.%20Empresa%3A%20%E2%80%A6%20Site%3A%20%E2%80%A6

**Em resumo:** No Windows, atualiza o PHP à mão: descarregar do php.net a versão corrigida, escolher a mesma variante (Thread Safe ou Non Thread Safe) e arquitetura, verificar o download por SHA-256, aproveitar o php.ini e as extensões, alterar o caminho e reiniciar todos os processos PHP. A atualização é particularmente urgente quando o Apache no Windows carrega o PHP como módulo, porque a equipa do PHP classifica este modo de operação no PHP2Shell como o de maior risco.

## Onde está o PHP em computadores Windows

Há servidores Windows com PHP com mais frequência do que muitos pensam. Raramente é o grande site, muitas vezes são intranets, aplicações especializadas ou ferramentas que alguém configurou há anos. A operação sob IIS está descrita em pormenor na página [Proteger o PHP no Windows e no IIS](https://phpsos.de/pt/server/windows-iis-php/). Este artigo trata da própria atualização e dos casos para além do IIS.

Os locais típicos são o Apache para Windows com o PHP como módulo, pacotes de desenvolvimento como XAMPP, WampServer ou Laragon que foram parar a um servidor, cópias próprias do PHP em aplicações especializadas e scripts PHP em tarefas agendadas. Os comandos PowerShell seguintes só leem e ajudam a encontrar:

```powershell
# Encontrar todos os php.exe na unidade C: (demora um pouco em unidades grandes)
Get-ChildItem -Path C:\ -Filter php.exe -Recurse -ErrorAction SilentlyContinue |
  Select-Object FullName, LastWriteTime

# Que php.exe está no caminho de pesquisa?
where.exe php

# Processos PHP e Apache em execução com caminho e hora de arranque
Get-Process php*, httpd -ErrorAction SilentlyContinue | Select-Object Name, Id, StartTime, Path

# Versão e configuração carregada de uma instalação (caminho como exemplo)
& "C:\PHP\8.4\php.exe" -v
& "C:\PHP\8.4\php.exe" --ini
```

Importante: se o PHP corre como módulo Apache, não há um processo PHP próprio. O PHP está então no processo `httpd.exe`. Quem procura apenas processos php-cgi não vê estas instalações.

Também se esquecem facilmente as tarefas agendadas que chamam scripts PHP, por exemplo para importações, relatórios ou reconciliações de dados. Usam muitas vezes um `php.exe` próprio e mais antigo. Para o PHP2Shell são consideradas menos expostas, porque a linha de comandos, segundo as indicações até agora do php.net, não faz parte dos modos de operação afetados; na troca, têm de qualquer modo apontar para o novo caminho, caso contrário a instalação antiga continua em uso e nunca é removida.

```powershell
# Tarefas agendadas que chamam o PHP
Get-ScheduledTask | Where-Object { $_.Actions.Execute -match 'php' } |
  Select-Object TaskName, TaskPath, @{n='Programm';e={$_.Actions.Execute}}
```

Um tema à parte são os computadores de desenvolvimento. O XAMPP e pacotes semelhantes iniciam o Apache com o PHP como módulo e são muitas vezes acessíveis em toda a rede da empresa. Também aí o PHP deve ser atualizado, e o servidor web só deve escutar no próprio computador.

## Thread Safe ou Non Thread Safe: a variante certa

O php.net oferece cada versão Windows em várias variantes. Para a troca vale: a mesma variante e arquitetura de até agora, caso contrário o servidor web ou as extensões não carregam.

| Característica | Opções | Quando qual |
|---|---|---|
| Segurança de threads | NTS (Non Thread Safe), TS (Thread Safe) | segundo o php.net, NTS para FastCGI, por exemplo IIS, e linha de comandos; TS para o PHP como módulo no Apache |
| Arquitetura | x64, x86 | o php.net recomenda x64 |
| Compilador | VS16, VS17 | requer o Visual C++ Redistributable para Visual Studio 2015 a 2022 |

Para o PHP 8.5, o php.net listava, na consulta de 25/10/2026, a versão 8.5.12 de 21/10/2026, como arquivo ZIP nas quatro combinações. Os restantes ramos suportados escolhe-os na mesma página. Estão corrigidos 8.5.12, 8.4.27, 8.3.36 e 8.2.35. Para a 8.1 e anteriores já não existem atualizações oficiais.

## Atualização do PHP no Windows: verificar o download e trocar de forma limpa

1. **Descarregar a versão corrigida:** da página de download Windows do php.net, de acordo com a variante e a arquitetura.
2. **Comparar a soma de verificação:** o php.net indica para cada arquivo um valor SHA-256. Se divergir, não use o ficheiro.
3. **Extrair para uma nova pasta:** por exemplo `C:\PHP\8.4.27`, para que o estado antigo fique como caminho de volta.
4. **Aproveitar a configuração:** copiar o `php.ini` existente e compará-lo com o novo `php.ini-production`.
5. **Verificar extensões:** ficheiros DLL adicionais de terceiros têm de corresponder à versão, variante e arquitetura.
6. **Alterar o caminho:** na entrada FastCGI, na linha `LoadModule` do Apache ou na variável de ambiente `PATH`.
7. **Reiniciar e verificar:** reiniciar o serviço do servidor web e as tarefas agendadas e depois controlar versão e horas de arranque.

```powershell
# Calcular o SHA-256 do ficheiro descarregado e comparar com o php.net
Get-FileHash .\php-8.5.12-nts-Win32-vs17-x64.zip -Algorithm SHA256

# Depois da troca: extensões carregadas e versão da nova instalação
& "C:\PHP\8.5.12\php.exe" -m
& "C:\PHP\8.5.12\php.exe" -v
```

Se o PHP não arrancar depois da troca ou comunicar uma DLL em falta, muitas vezes falta o Visual C++ Redistributable na arquitetura adequada, ou uma extensão não corresponde à nova versão. O erro revela-se mais depressa se chamar `php.exe -v` diretamente na linha de comandos antes de alterar o servidor web. O que fazem as várias entradas do php.ini explica-o [O php.ini explicado](https://phpsos.de/pt/php/php-ini-erklaert/).

## Apache no Windows: levar a sério o modo módulo

Muitas instalações Windows mais antigas ligam o PHP através de uma linha `LoadModule` diretamente ao Apache. Tecnicamente é o mesmo que o mod_php no Linux. A equipa do PHP classifica o risco do PHP2Shell precisamente aí como o mais elevado, porque foi demonstrado um exploit antes de sequer correr o código da aplicação. Os antecedentes estão em [Porque é que o mod_php está particularmente exposto](https://phpsos.de/pt/php2shell/mod-php-risiko/).

Que módulos um Apache carrega mostra-o `httpd.exe -M` na pasta bin da instalação; o comando só lê. Se aí constar um módulo PHP, a atualização tem prioridade. A médio prazo compensa a mudança para o PHP através de FastCGI com build NTS, para que o PHP corra em processos próprios. Isso exige um teste, porque mudam a configuração e as permissões.

> **Importante:**
> A troca dos ficheiros ainda não fecha a vulnerabilidade. Enquanto o serviço Apache, os pools de aplicações do IIS ou as tarefas agendadas correrem com a versão antiga, a vulnerabilidade continua aberta. Verifique a hora de arranque de cada processo depois da atualização.

## Depois da atualização: controlo e vestígios

Registe, por instalação, caminho, versão, variante e data da troca. Remova as pastas PHP antigas só quando o novo estado funcionar de forma estável, e então mesmo, para que não sejam voltadas a ligar por engano.

Uma atualização não remove software malicioso. Se um servidor Windows esteve acessível a partir da Internet nos dias antes do patch, verifique nos diretórios web a existência de novos ficheiros de script e nas tarefas agendadas e contas locais a existência de algo desconhecido, e guarde os registos do servidor web a partir de 20 de outubro. Como reconhece uma intrusão descreve-o [Já fui comprometido?](https://phpsos.de/pt/php2shell/bin-ich-gehackt-anzeichen/).

## Como ajuda concretamente a PHP SOS?

- **Encontrar todas as instalações:** procuramos o PHP nos seus sistemas Windows, também em módulos Apache, pacotes de desenvolvimento e aplicações especializadas.
- **Trocar e comprovar:** através do [serviço de patch PHP](https://phpsos.de/pt/leistungen/php-patch-service/), mudamos para a versão corrigida, verificamos somas de verificação e documentamos versão e arranque dos processos.
- **Melhorar o modo de operação:** onde o PHP corre como módulo Apache, planeamos e testamos a passagem para FastCGI.
- **Verificar vestígios:** guardamos registos e verificamos os sistemas quanto a indícios de um ataque.


## Perguntas frequentes

**O Windows Update também atualiza o PHP?**  
Não. O PHP não faz parte do Windows. Vem como arquivo ZIP do php.net, como parte de um pacote como o XAMPP ou com uma aplicação especializada e tem de ser atualizado por esse mesmo caminho.

**Preciso da versão Thread Safe ou Non Thread Safe?**  
Segundo o php.net, a NTS destina-se ao FastCGI, ou seja, por exemplo ao IIS, e à linha de comandos. A TS destina-se à operação como módulo no servidor web, por exemplo no Apache. Na atualização, use a mesma variante de até agora.

**Como verifico se o download do PHP é autêntico?**  
O php.net indica para cada arquivo Windows uma soma de verificação SHA-256. Com Get-FileHash no PowerShell calcula a soma do ficheiro descarregado e compara os dois valores caráter a caráter.

**Uso o XAMPP num servidor. E agora?**  
Pacotes como o XAMPP trazem o seu próprio PHP e Apache, muitas vezes com o PHP como módulo Apache. Verifique se o projeto oferece uma versão com PHP corrigido e, caso contrário, passe a instalação para uma solução mantida. Para a operação produtiva, estes pacotes de desenvolvimento não se destinam de qualquer modo.

## Fontes

- [php.net: descarregar o PHP para Windows](https://www.php.net/downloads.php?os=windows)
- [PHP: versões suportadas](https://www.php.net/supported-versions.php)
- [Apache HTTP Server: documentação](https://httpd.apache.org/docs/)
