Poupe 15% em todos os serviços de alojamento

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código: Skills Começar a trabalhar
Secções
Administração Linux

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_functions e open_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 --ini

Saí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.php

Passo 2: Adicione o seguinte conteúdo:

<?php
phpinfo();
?>

Passo 3: Salve o arquivo e abra seu navegador e navegue para:

http://yourdomain.com/info.php

Passo 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.php

Mé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çãoCaminho 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.bak

Isto 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.ini

Ou use vim para edição mais avançada:

sudo vim /etc/php/8.2/apache2/php.ini

Passo 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: Prima CTRL + 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, depois Y, depois Enter
  • vim: Prima ESC, escreva :wq, depois prima Enter

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 = 3000

Configuraçõ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.log

Gestã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 = On

OPcache (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 = 1

5. 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 httpd

Nginx + PHP-FPM

# Restart PHP-FPM (replace 8.2 with your PHP version)
sudo systemctl restart php8.2-fpm

# Restart Nginx
sudo systemctl restart nginx

Recarga 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-fpm

Verificar se os Serviços Estão em Execução

sudo systemctl status apache2
sudo systemctl status php8.2-fpm

6. 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_source

Restringir Acesso ao Sistema de Ficheiros

; Limit PHP file access to specific directories
open_basedir = /var/www/html:/tmp

Ocultar Informações de Versão do PHP

; Don't expose PHP version in HTTP headers
expose_php = Off

Desativar Inclusão de Ficheiros Remotos

; Prevent PHP from including remote URLs (common attack vector)
allow_url_fopen = Off
allow_url_include = Off

Endurecer 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

ErroPor Que É um ProblemaSolução
Definir memory_limit = -1 em produçãoPermite que scripts consumam RAM ilimitada, causando travamentos do servidorDefina um limite razoável como 256M ou 512M
display_errors = On em produçãoExpõe caminhos de ficheiros sensíveis e credenciais de base de dados aos utilizadoresDefina como Off e use log_errors = On em vez disso
post_max_size < upload_max_filesizeCausa falhas silenciosas de carregamentoSempre defina post_max_sizeupload_max_filesize
Editar o ficheiro php.ini erradoAs alterações não se aplicam aos pedidos webUse phpinfo() para confirmar qual ficheiro é carregado pelo seu servidor web
Não reiniciar o servidor após alteraçõesAs definições antigas permanecem ativasSempre reinicie Apache ou PHP-FPM após editar
Deixar info.php no servidorExpõe a configuração completa do servidor aos atacantesElimine imediatamente após utilização
Definir allow_url_include = OnAtiva 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.ini antes de fazer alterações
  • Identifique o arquivo correto — CLI e SAPIs de servidor web frequentemente usam arquivos php.ini diferentes
  • 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() ou php -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.