Voltar
PHP não reflete alterações sem reiniciar o servidor
Como corrigir o PHP quando alterações nos arquivos só aparecem depois de reiniciar o servidor local.
- Publicado em
- Tempo de leitura
- 2 min de leitura
Ao rodar um projeto local com o servidor embutido do PHP, eu alterava um arquivo, atualizava a página no navegador e nada mudava. A alteração só aparecia depois de parar e iniciar o servidor novamente.
No meu caso isso aconteceu no CachyOS, mas a causa estava na configuração do PHP. Por isso, a mesma ideia também vale no Windows: o importante é encontrar qual arquivo php.ini o PHP está usando e ajustar as diretivas do OPcache.
O sintoma
O servidor estava rodando normalmente:
php -S localhost:3000Mas qualquer mudança em arquivos PHP não era refletida imediatamente no navegador. Para ver a alteração, eu precisava reiniciar o processo do servidor.
Verificando o OPcache
O primeiro passo foi conferir as configurações atuais relacionadas ao OPcache:
php -i | grep opcacheOs valores problemáticos eram estes:
opcache.validate_timestamps => On
opcache.revalidate_freq => 180Com opcache.revalidate_freq em 180, o PHP podia demorar até 180 segundos para verificar novamente se um arquivo havia mudado.
Encontrando o php.ini correto
Antes de alterar qualquer coisa, descubra qual php.ini está sendo carregado pelo CLI:
php --iniProcure pela linha Loaded Configuration File. Esse é o arquivo que precisa ser editado.
No Linux, ele pode estar em caminhos como:
/etc/php/php.iniNo Windows, depende da instalação. Pode ser algo como:
C:\php\php.ini
C:\xampp\php\php.iniO caminho exato deve ser sempre o que aparece no php --ini.
Corrigindo
No php.ini usado pelo CLI, ajuste estas opções:
opcache.validate_timestamps=1
opcache.revalidate_freq=0O opcache.validate_timestamps=1 mantém a verificação de alterações nos arquivos. O opcache.revalidate_freq=0 faz essa verificação a cada requisição, que é o comportamento esperado durante o desenvolvimento local.
Depois de salvar, confirme:
php -i | grep -E "validate_timestamps|revalidate_freq"O resultado esperado é:
opcache.validate_timestamps => On => On
opcache.revalidate_freq => 0 => 0Reiniciando o servidor
Depois da alteração no php.ini, reinicie o servidor uma vez:
php -S localhost:3000A partir daí, as mudanças nos arquivos PHP passam a ser refletidas imediatamente ao atualizar a página.
Resumo
Se o PHP só mostra suas alterações depois de reiniciar o servidor local, confira o OPcache:
php --ini
php -i | grep -E "validate_timestamps|revalidate_freq"E, no php.ini carregado pelo CLI, deixe assim:
opcache.validate_timestamps=1
opcache.revalidate_freq=0Essa configuração é útil para desenvolvimento. Em produção, o ideal é revisar a configuração de OPcache pensando em performance e no processo de deploy do servidor.
