Configuração em tempo de execuçãoO arquivo de configuração
O arquivo de configuração (&php.ini;)
é lido quando o PHP inicia. Para as versões de módulo de servidor,
isso acontece apenas quando o servidor web for iniciado. Para as
versões CGI e CLI, isso acontece
a cada invocação.
&php.ini; é procurado nesses lugares (na ordem):
Local específico do módulo SAPI (diretiva PHPIniDir
no Apache 2, opção de linha de comando -c no CGI e CLI)
A variável de ambiente PHPRC.
A localização do arquivo php.ini
pode ser definida para versões diferentes do PHP. A raiz do registro depende da compilação em 32 ou 64 bits do sistema operacional (SO) e do PHP.
Para um PHP 32 bits em um SO de 32 bits ou um PHP de 64 bits em um SO de 64 bits use [(HKEY_LOCAL_MACHINE\SOFTWARE\PHP], Para um PHP 32 bits em um SO de 64 bits use [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\PHP]].
Para sistema onde a compilação em bits coincida, as seguintes chaves
são examinadas, nessa ordem:
[HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y.z],
[HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y] e
[HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x], onde
x, y e z significam os valores de versão PHP major, minor e release.
Para PHP versão 32 bits em um SO de 64 bits, as seguintes chaves são examinadas em ordem:
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\x.y.z],
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\x.y] e
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\x], onde
x, y e z significam os valores de versão PHP major, minor e release.
Se houver um valor
para IniFilePath nestas chaves, então o primeiro
encontrado será utilizado para a localização do php.ini
(apenas Windows).
[HKEY_LOCAL_MACHINE\SOFTWARE\PHP] ou
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\PHP], valor de
IniFilePath (Somente Windows).
Diretório de trabalho atual (exceto CLI).
O diretório do servidor web (para módulo SAPI), ou diretório do PHP
(caso contrário, no Windows).
Diretório do Windows (C:\windows
ou C:\winnt) (para Windows), ou
a opção de tempo de compilação --with-config-file-path .
Se php-SAPI.ini existe (onde SAPI é o SAPI usado, então o
nome de arquivo é, por exemplo, php-cli.ini ou
php-apache.ini), é usado ao invés do arquivo &php.ini;.
O nome SAPI pode ser determinado pela função php_sapi_name.
O servidor web Apache muda o diretório para raiz durante a inicialização, causando com
que o PHP tente ler o arquivo &php.ini; da raiz do arquivo de sistema, se ele existir.
Variáveis de ambiente podem ser referenciadas dentro de valores de configuração
no &php.ini; como mostrado abaixo. A partir do PHP 8.3.0, um valor padrão pode ser
especificado e será usado quando a variável referenciada não estiver
definida.
Variáveis de ambiente no &php.ini;
As diretivas do arquivo &php.ini; tratadas por extensões são documentadas
nas respectivas páginas das próprias extensões. A lista de
diretivas principais está disponível no apêndice. Nem todas
as diretivas do PHP estão documentadas no manual. Para uma lista completa
das diretivas disponíveis na sua versão do PHP, por favor leia seu arquivo
&php.ini;. Alternativamente, você pode encontrar
a última versão do &php.ini; no
Git, que também pode ser útil.
Exemplo de arquivo &php.ini;
É possível acessar as variáveis .ini
dentro dos arquivos .ini. Exemplo: open_basedir = ${open_basedir}
":/new/dir".
Configuração em diretório
É possível configurar o PHP para procurar por arquivos .ini em um diretório
após a leitura do &php.ini;. Isto é possível na compilação pela configuração da opção
. No
O diretório de configuração pode ser sobrescrito em tempo de execução
através da configuração da variável de ambiente PHP_INI_SCAN_DIR.
É possível procurar em vários diretórios os separando com o
delimitador específico da plataforma (; no Windows, NetWare
e RISC OS; : em todas as outras plataformas; o PHP
utilizará a constante PATH_SEPARATOR).
Se um diretório em branco estiver informado em PHP_INI_SCAN_DIR, o PHP
também procurará pelo diretório informado na diretiva de compilação
.
Dentro de cada diretório o PHP irá pesquisar todos os arquivos terminados em
.ini em ordem alfabética. A lista de arquivos
é carregada, e nessa ordem são interpretados com uma chamada a
php_ini_scanned_files, o por rodar o PHP com a opção
.
Arquivos .user.ini
O PHP tem suporte para arquivos de configuração INI por
cada diretório. Esses arquivos são processados apenas pelo
CGI/FastCGI SAPI. Essa funcionalidade torna obsoleta a extensão PECL htscanner.
Se você estiver rodando o PHP como um módulo do Apache, use arquivos &htaccess; para obter o mesmo
efeito.
Além do arquivo &php.ini; principal, o PHP procura por arquivos INI em cada
diretório, iniciando no diretório do arquivo PHP requisitado e
continua o caminho até a raiz do documento atual (conforme definido na variável
$_SERVER['DOCUMENT_ROOT']). Caso o arquivo PHP esteja fora
da raiz do documento, apenas o seu diretório é procurado.
Somente configurações INI com
os modos INI_PERDIR e
INI_USER serão reconhecidos nos arquivos INI estilo
.user.ini.
Duas novas diretivas INI,
user_ini.filename e
user_ini.cache_ttl
controlam o uso de arquivos INI de usuário.
A diretiva user_ini.filename define o nome do arquivo que o PHP
procura em cada diretório; se for definido como uma string vazia, o PHP não
fará a varredura em tudo. O padrão é .user.ini.
A diretiva user_ini.cache_ttl controla a frequência de como os arquivos INI
de usuário são relidos. O padrão é de 300 segundos (5 minutos).
Onde uma configuração deve ser definida
Estes modos determinam quando e onde uma diretiva do PHP pode ou não pode
ser definida, e cada diretiva no manual faz referência a um destes modos.
Por exemplo, algumas definições podem ser feitas em um script PHP
usando ini_set, enquanto outras só podem ser feitas no
&php.ini; ou &httpd.conf;.
Por exemplo, a configuração
output_buffering
é INI_PERDIR portanto não pode ser definida usando
ini_set. Entretanto a diretiva
display_errors é
INI_ALL portanto pode ser definida em qualquer lugar
com ini_set.
Constantes de modo INIINI_USER
(int)
A entrada pode ser definida em scripts do usuário (como com ini_set)
ou no registro do Windows.
A entrada pode ser definida no &user-ini;
INI_PERDIR
(int)
A entrada pode ser definida no &php.ini;, &htaccess;, &httpd.conf; ou &user-ini;
INI_SYSTEM
(int)
A entrada pode ser definida no &php.ini; ou &httpd.conf;
INI_ALL
(int)
A entrada pode ser definida em qualquer lugar
Como mudar as configuraçõesExecutando PHP como módulo do Apache
Quando usar o PHP como módulo do Apache, você pode mudar as
configurações usando diretivas nos arquivos de configuração
do Apache (ex.: &httpd.conf; e &htaccess;). Você precisará de
privilégios "AllowOverride Options" ou "AllowOverride All" para fazer isso.
Há várias diretivas do Apache que permitem que você
mude a configuração do PHP de dentro dos arquivos de configuração
do Apache. Para uma lista de quais diretivas são
INI_ALL, INI_PERDIR,
ou INI_SYSTEM, olhe no apêndice
Lista de diretivas do arquivo php.ini.
php_valuenamevalue
Define o valor da diretiva especificada.
Pode ser usado apenas com diretivas do tipo INI_ALL e INI_PERDIR.
Para limpar um valor definido anteriormente, use o valor none.
Não use php_value para definir valores booleanos.
A diretiva php_flag deve ser usada (veja abaixo).
php_flagnameon|off
Usado para definir uma diretiva de configuração booleana.
Pode ser usada apenas com diretivas dos tipos INI_ALL e
INI_PERDIR.
php_admin_valuenamevalue
Define o valor da diretiva especificada.
Essa diretiva não pode ser usada em arquivos &htaccess;.
Qualquer tipo de diretiva definido com php_admin_value
não pode ser sobrescrito pelo &htaccess; ou pela função ini_set.
Para limpar um valor definido anteriormente, use o valor none.
php_admin_flagnameon|off
Usado para definir uma diretiva de configuração booleana.
Essa diretiva não pode ser usada em arquivos &htaccess;.
Qualquer tipo de diretiva definido com php_admin_flag
não pode ser sobrescrito pelo &htaccess; ou pela função ini_set.
Exemplo de configuração do Apache
php_value include_path ".:/usr/local/lib/php"
php_admin_flag engine on
php_value include_path ".:/usr/local/lib/php"
php_admin_flag engine on
]]>
Constantes PHP não existem fora do PHP. Por exemplo, no
arquivo &httpd.conf; você não pode usar constantes do PHP
como E_ALL ou E_NOTICE
para definir a diretiva error_reporting,
já que elas não terão significado algum e serão avaliadas como
0. Ao invés disso, use os valores de máscara de bits associados.
Essas constantes podem ser usados no &php.ini;
Mudando configuração do PHP através do registro do Windows
Quando executar o PHP no Windows, os valores de configuração podem ser
modificados para cada diretório, usando o registro do Windows. Os
valores de configuração são armazenados na chave de registro
HKLM\SOFTWARE\PHP\Per Directory Values,
nas sub-chaves correspondentes aos caminhos dos diretórios. Por exemplo,
valores para o diretório c:\inetpub\wwwroot estariam
armazenados na chave HKLM\SOFTWARE\PHP\Per Directory Values\c\inetpub\wwwroot.
As configurações para o
diretório estarão ativas para qualquer script rodando neste
diretório ou qualquer subdiretório dele. Os valores na chave
devem ter o nome da diretiva de configuração do PHP e um
valor string. Constantes PHP nos valores não são interpretados.
Apenas valores de configuração modificáveis no
INI_USER podem ser definidos
desta forma, e valores do INI_PERDIR não podem,
pois esses valores são recarregados em cada request.
Outras interfaces para PHP
Independente de como você execute PHP, você pode mudar certos valores durante
a execução de seus scripts através da função ini_set. Veja
a documentação na página ini_set para mais informações.
Se você estiver interessado na lista completa das configurações
definidas no seu sistema com os valores atuais, você pode executar a função
phpinfo, e revisar a página resultante.
Você pode também acessar os valores de configurações
de diretivas individuais em tempo de execução usando as funções
ini_get ou get_cfg_var.