Configurando o Arquivo php.ini: Um Guia Completo para Otimizar PHP no Seu Servidor
O arquivo php.ini é o arquivo de configuração mestre do PHP — a base de quase todas as aplicações web modernas. Quer esteja a executar WordPress, Laravel, Magento ou uma aplicação personalizada, compreender como configurar corretamente php.ini pode melhorar dramaticamente o desempenho do seu servidor, reforçar a segurança e garantir compatibilidade perfeita com a sua stack de software.
Este guia abrangente orienta-o através de tudo o que precisa de saber: o que php.ini faz, como encontrá-lo, como editá-lo com segurança e como verificar se as suas alterações estão a funcionar corretamente.
1. O que é php.ini e por que é importante?
O php.ini é um arquivo de configuração em texto simples que PHP lê sempre que é inicializado. Contém centenas de diretivas — pares chave-valor que controlam praticamente todos os aspectos do comportamento de tempo de execução do PHP, incluindo:
- Alocação de memória para scripts
- Limites de upload de arquivo e tamanhos de dados POST
- Níveis de relatório de erros e logging
- Configurações de gerenciamento de sessão
- Carregamento de extensões (por exemplo, PDO, cURL, OPcache)
- Restrições de segurança como
disable_functionseopen_basedir - Limites de tempo de execução para evitar scripts descontrolados
Acertar essas configurações não é apenas uma questão de conveniência — impacta diretamente a estabilidade da sua aplicação, postura de segurança e experiência do utilizador final. As configurações PHP mal configuradas são uma das principais causas de erros de aplicação, falhas de upload de arquivo, travamentos por esgotamento de memória e vulnerabilidades de segurança exploráveis.
Se está a alojar as suas aplicações PHP num plano de VPS Hosting, tem acesso root completo para modificar php.ini livremente — dando-lhe controlo total sobre o seu ambiente PHP.
2. Locating the php.ini File
A localização do php.ini varia dependendo do seu sistema operacional, versão do PHP e da Server API (SAPI) em uso (Apache mod_php, PHP-FPM, ou CLI). Aqui estão três métodos confiáveis para encontrá-lo.
Método 1: Usando a Linha de Comando (Método Mais Rápido)
Abra seu terminal ou conecte via SSH e execute:
php --iniSaída de exemplo:
Configuration File (php.ini) Path: /etc/php/8.2/cli
Loaded Configuration File: /etc/php/8.2/cli/php.ini
Scan for additional .ini files in: /etc/php/8.2/cli/conf.d
Additional .ini files parsed: /etc/php/8.2/cli/conf.d/10-opcache.ini, ...> Importante: PHP frequentemente tem arquivos php.ini separados para diferentes SAPIs. A versão CLI (/etc/php/8.2/cli/php.ini) é usada ao executar PHP a partir da linha de comando, enquanto a versão Apache ou PHP-FPM (/etc/php/8.2/apache2/php.ini ou /etc/php/8.2/fpm/php.ini) é usada para requisições web. Sempre edite a correta para seu caso de uso.
Método 2: Usando phpinfo() em um Navegador
Este método revela exatamente qual arquivo php.ini seu servidor web está carregando — o que pode diferir da versão CLI.
Passo 1: Crie um novo arquivo no diretório raiz da web:
sudo nano /var/www/html/info.phpPasso 2: Adicione o seguinte conteúdo:
<?php
phpinfo();
?>Passo 3: Salve o arquivo e abra seu navegador e navegue para:
http://yourdomain.com/info.phpPasso 4: Procure pela linha “Loaded Configuration File” perto do topo da saída. Ela exibirá o caminho completo para o arquivo php.ini ativo.
> ⚠️ Aviso de Segurança: Elimine info.php imediatamente após o uso. Este arquivo expõe detalhes sensíveis de configuração do servidor que atacantes podem explorar.
sudo rm /var/www/html/info.phpMétodo 3: Usando php -r (One-Liner Rápido)
php -r "echo php_ini_loaded_file();"Isto imprime o caminho do arquivo php.ini carregado diretamente no seu terminal — nenhuma criação de arquivo necessária.
Localizações Comuns de php.ini por Plataforma
| Plataforma / Configuração | Caminho Típico de php.ini |
|---|---|
| Ubuntu/Debian + Apache (PHP 8.2) | /etc/php/8.2/apache2/php.ini |
| Ubuntu/Debian + PHP-FPM (PHP 8.2) | /etc/php/8.2/fpm/php.ini |
| Ubuntu/Debian + CLI (PHP 8.2) | /etc/php/8.2/cli/php.ini |
| CentOS/RHEL + Apache | /etc/php.ini |
| cPanel/WHM | /usr/local/lib/php.ini |
| Windows (XAMPP) | C:xamppphpphp.ini |
| macOS (Homebrew PHP 8.2) | /opt/homebrew/etc/php/8.2/php.ini |
3. Editar o Ficheiro php.ini
Passo 1: Criar uma Cópia de Segurança Primeiro
Antes de fazer qualquer alteração, crie sempre uma cópia de segurança:
sudo cp /etc/php/8.2/apache2/php.ini /etc/php/8.2/apache2/php.ini.bakIsto permite-lhe restaurar rapidamente a configuração original se algo correr mal.
Passo 2: Abrir o Ficheiro num Editor de Texto
Use nano para uma experiência amigável para principiantes:
sudo nano /etc/php/8.2/apache2/php.iniOu use vim para edição mais avançada:
sudo vim /etc/php/8.2/apache2/php.iniPasso 3: Navegar e Editar Diretivas
O ficheiro php.ini é grande (frequentemente com mais de 1.500 linhas). Use a função de pesquisa do seu editor para saltar para diretivas específicas:
- Em
nano: PrimaCTRL + W, depois escreva o nome da diretiva (por exemplo,memory_limit) - Em
vim: Prima/, depois escreva o nome da diretiva
Passo 4: Guardar e Sair
- nano: Prima
CTRL + X, depoisY, depoisEnter - vim: Prima
ESC, escreva:wq, depois primaEnter
4. Diretivas Principais do php.ini Explicadas
Aqui está uma análise detalhada das diretivas php.ini mais importantes que você deve conhecer e configurar:
Limites de Memória e Recursos
; Maximum memory a single PHP script can allocate
memory_limit = 256M
; Maximum time (in seconds) a script is allowed to run
max_execution_time = 60
; Maximum time PHP will spend parsing request data
max_input_time = 120
; Maximum number of input variables (important for complex forms)
max_input_vars = 3000Configurações de Upload de Ficheiros
; Whether file uploads are permitted
file_uploads = On
; Maximum size of an individual uploaded file
upload_max_filesize = 64M
; Maximum size of all POST data (must be >= upload_max_filesize)
post_max_size = 64M
; Maximum number of files that can be uploaded simultaneously
max_file_uploads = 20> Regra prática: post_max_size deve sempre ser igual ou maior que upload_max_filesize. Se post_max_size for menor, os uploads falharão silenciosamente.
Relatório de Erros e Registo
; ---- DEVELOPMENT ENVIRONMENT ----
; Show all errors on screen (never use in production)
error_reporting = E_ALL
display_errors = On
display_startup_errors = On
; ---- PRODUCTION ENVIRONMENT ----
; Log errors to a file, never display them to users
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
display_errors = Off
display_startup_errors = Off
log_errors = On
error_log = /var/log/php/error.logGestão de Sessões
; Where session data is stored on the server
session.save_path = "/var/lib/php/sessions"
; Session cookie lifetime in seconds (0 = until browser closes)
session.cookie_lifetime = 0
; Prevent JavaScript from accessing session cookies (XSS protection)
session.cookie_httponly = On
; Only send session cookies over HTTPS
session.cookie_secure = On
; Strict session ID mode (prevents session fixation attacks)
session.use_strict_mode = OnOPcache (Acelerador de Desempenho)
OPcache melhora dramaticamente o desempenho do PHP armazenando bytecode de script pré-compilado na memória partilhada:
opcache.enable = 1
opcache.memory_consumption = 128
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 10000
opcache.revalidate_freq = 60
opcache.fast_shutdown = 15. Reiniciar o Seu Servidor Web
As alterações a php.ini não entram em vigor até reiniciar o serviço relevante. Use o comando apropriado para a sua configuração:
Apache (mod_php)
sudo systemctl restart apache2
# or on CentOS/RHEL:
sudo systemctl restart httpdNginx + PHP-FPM
# Restart PHP-FPM (replace 8.2 with your PHP version)
sudo systemctl restart php8.2-fpm
# Restart Nginx
sudo systemctl restart nginxRecarga Elegante (Zero Downtime)
Para servidores de produção, use uma recarga elegante para evitar descartar conexões ativas:
# Apache graceful reload
sudo systemctl reload apache2
# PHP-FPM graceful reload
sudo systemctl reload php8.2-fpmVerificar se os Serviços Estão em Execução
sudo systemctl status apache2
sudo systemctl status php8.2-fpm6. Verificando Suas Alterações
Após reiniciar seu servidor, confirme que suas novas configurações estão ativas usando um destes métodos:
Método 1: Grep de Linha de Comando
# Check memory_limit
php -i | grep memory_limit
# Check upload_max_filesize
php -i | grep upload_max_filesize
# Check multiple values at once
php -i | grep -E 'memory_limit|upload_max_filesize|post_max_size|max_execution_time'Método 2: Página phpinfo()
Recrie o arquivo info.php temporariamente (lembre-se de deletá-lo depois) e procure por suas diretivas modificadas. Os valores alterados aparecerão nas colunas "Local Value" e "Master Value".
Método 3: One-Liner PHP
php -r "echo ini_get('memory_limit');"7. Dicas Avançadas de Otimização php.ini
Usar .htaccess para Substituir php.ini (Apenas Apache)
Se estiver em hospedagem compartilhada ou não tiver acesso root, pode substituir certas php.ini definições via .htaccess:
php_value memory_limit 256M
php_value upload_max_filesize 64M
php_value post_max_size 64M
php_value max_execution_time 120> Nota: Isto apenas funciona se AllowOverride estiver ativado e o fornecedor de hospedagem permitir substituições de diretivas PHP.
Usar ini_set() no Código PHP
Para definições específicas da aplicação, pode substituir valores php.ini em tempo de execução dentro dos seus scripts PHP:
<?php
ini_set('memory_limit', '512M');
ini_set('max_execution_time', '300');
?>Ficheiros php.ini Por Diretório (PHP-FPM)
Com PHP-FPM, pode aplicar diferentes definições php.ini a diferentes anfitriões virtuais ou diretórios configurando ficheiros de pool em /etc/php/8.2/fpm/pool.d/. Isto é especialmente útil ao alojar múltiplas aplicações com requisitos diferentes.
Se estiver a gerir múltiplas aplicações PHP, um VPS com cPanel torna significativamente mais fácil gerir definições PHP por domínio através de uma interface gráfica sem editar manualmente ficheiros de configuração.
8. Endurecimento de Segurança via php.ini
Configurar adequadamente php.ini é uma das formas mais eficazes de endurecer seu ambiente PHP contra ataques comuns.
Desativar Funções Perigosas
; Prevent execution of system commands from PHP scripts
disable_functions = exec, passthru, shell_exec, system, proc_open, popen, curl_exec, curl_multi_exec, parse_ini_file, show_sourceRestringir Acesso ao Sistema de Ficheiros
; Limit PHP file access to specific directories
open_basedir = /var/www/html:/tmpOcultar Informações de Versão do PHP
; Don't expose PHP version in HTTP headers
expose_php = OffDesativar Inclusão de Ficheiros Remotos
; Prevent PHP from including remote URLs (common attack vector)
allow_url_fopen = Off
allow_url_include = OffEndurecer Segurança de Sessão
session.cookie_httponly = On
session.cookie_secure = On
session.use_strict_mode = On
session.cookie_samesite = "Strict"> Dica Pro: Se está a executar um site de comércio eletrónico ou a processar dados sensíveis do utilizador, combine seu php.ini endurecido com um Certificado SSL válido para encriptar todos os dados em trânsito. HTTPS é obrigatório para session.cookie_secure = On funcionar corretamente.
9. Erros Comuns de php.ini para Evitar
| Erro | Por Que É um Problema | Solução |
|---|---|---|
Definir memory_limit = -1 em produção | Permite que scripts consumam RAM ilimitada, causando travamentos do servidor | Defina um limite razoável como 256M ou 512M |
display_errors = On em produção | Expõe caminhos de ficheiros sensíveis e credenciais de base de dados aos utilizadores | Defina como Off e use log_errors = On em vez disso |
post_max_size < upload_max_filesize | Causa falhas silenciosas de carregamento | Sempre defina post_max_size ≥ upload_max_filesize |
Editar o ficheiro php.ini errado | As alterações não se aplicam aos pedidos web | Use phpinfo() para confirmar qual ficheiro é carregado pelo seu servidor web |
| Não reiniciar o servidor após alterações | As definições antigas permanecem ativas | Sempre reinicie Apache ou PHP-FPM após editar |
Deixar info.php no servidor | Expõe a configuração completa do servidor aos atacantes | Elimine imediatamente após utilização |
Definir allow_url_include = On | Ativa ataques de Inclusão de Ficheiro Remoto (RFI) | Mantenha sempre este Off |
10. Conclusão
Dominar a configuração do php.ini é uma habilidade fundamental para qualquer administrador de sistema ou desenvolvedor web. As configurações corretas podem fazer a diferença entre um servidor lento e vulnerável e um ambiente rápido, seguro e pronto para produção.
Para resumir os pontos-chave:
- Sempre faça backup do
php.iniantes de fazer alterações - Identifique o arquivo correto — CLI e SAPIs de servidor web frequentemente usam arquivos
php.inidiferentes - Ajuste os limites de recursos (
memory_limit,max_execution_time,upload_max_filesize) para corresponder às necessidades da sua aplicação - Reforce a segurança desativando funções perigosas, ocultando informações de versão e restringindo o acesso a arquivos
- Ative OPcache para ganhos significativos de desempenho
- Nunca exiba erros em produção — registre-os em vez disso
- Reinicie seu servidor web após cada alteração e verifique com
phpinfo()ouphp -i
O ambiente de hospedagem que você escolhe também desempenha um papel importante no controle que você tem sobre a configuração do PHP. Com Servidores Dedicados da AlexHost, você obtém acesso completo e irrestrito à configuração PHP do seu servidor — ideal para aplicações de alto tráfego com requisitos complexos. Para projetos menores ou equipes que estão começando, os planos de Hospedagem Web Compartilhada fornecem um ambiente gerenciado onde muitas configurações de PHP são pré-otimizadas para você.
Revise regularmente sua configuração do php.ini conforme sua aplicação evolui, as versões do PHP são atualizadas e seus padrões de tráfego mudam. Um ambiente PHP bem ajustado não é uma configuração única — é uma prática contínua que traz dividendos em desempenho, confiabilidade e segurança.
em todos os serviços de alojamento