php[tek] 2018 : Call for Speakers

Descrição das principais diretivas do php.ini

Esta lista inclui as principais diretivas do php.ini que podemos definir para configurar o PHP. Diretivas manipuladas por extensões são listadas e detalhadas nas respectivas páginas de documentação da extensão; Informações sobre diretivas de sessão, por exemplo, podem ser encontradas na página de sessões.

Nota:

Os padrões listados aqui são utilizados quando o php.ini não é carregado; os valores do php.ini de produção e desenvolvimento podem variar.

Opções de Linguagem

Opções de Linguagem e Configurações Diversas
Nome Padrão Modificável Changelog
short_open_tag "1" PHP_INI_PERDIR  
asp_tags "0" PHP_INI_PERDIR Removida no PHP 7.0.0.
precision "14" PHP_INI_ALL  
serialize_precision "17" PHP_INI_ALL Até o PHP 5.3.5 o valor padrão era 100.
y2k_compliance "1" PHP_INI_ALL Removida no PHP 5.4.0.
allow_call_time_pass_reference "1" PHP_INI_PERDIR Removida no PHP 5.4.0.
disable_functions "" PHP_INI_SYSTEM apenas  
disable_classes "" php.ini apenas  
exit_on_timeout "" PHP_INI_ALL Disponível a partir do PHP 5.3.0.
expose_php "1" php.ini apenas  
zend.multibyte "0" PHP_INI_ALL Disponível a partir do PHP 5.4.0.
zend.script_encoding NULL PHP_INI_ALL Disponível a partir do PHP 5.4.0.
zend.detect-unicode NULL PHP_INI_ALL Disponível a partir do PHP 5.4.0.
zend.signal_check "0" PHP_INI_SYSTEM Disponível a partir do PHP 5.4.0.
zend.assertions "1" PHP_INI_ALL com restrições Disponível a partir do PHP 7.0.0.
zend.ze1_compatibility_mode "0" PHP_INI_ALL Removida no PHP 5.3.0.
detect_unicode "1" PHP_INI_ALL Disponível a partir do PHP 5.1.0. Renomeada para zend.detect-unicode a partir do PHP 5.4.0.

Uma rápida explicação das diretivas de configuração.

short_open_tag boolean

Informa ao PHP se a forma abreviada (<? ?>) da tag de abertura do PHP é permitida. Se quiser usar PHP em conjunto com XML, esta opção pode ser desabilitada a fim de usar <?xml ?> em linha. Caso contrário, pode-se imprimir isto com PHP, por exemplo <?php echo '<?xml version="1.0"?>'; ?>. Além disso, se desabilitada, deve ser usada a forma extensa da tag de abertura do PHP (<?php ?>).

Nota:

Esta diretiva também afetava a forma abreviada <?= antes do PHP 5.4.0, que é o mesmo que <? echo. O uso desta forma abreviada exigia que short_open_tag estivesse habilitada. Desde o PHP 5.4.0 <?= está sempre disponível.

asp_tags boolean
Ativa o uso das tags estilo ASP <% %> além das usuais tags <?php ?>. Isto inclui a forma abreviada para impressão de valor de variável <%= $value %>. Para mais informações, veja escapando HTML.

Changelog de asp_tags
Versão Descrição
7.0.0 Removida do PHP.

precision integer
O número de dígitos significativos exibidos em números de ponto flutuante. -1 significa que um algoritmo avançado para arredondar estes números será utilizado.
serialize_precision integer
O número de dígitos significativos armazenados durante a serialização de números de pontos flutuantes. -1 significa que um algoritmo avançado para arredondar estes números será utilizado.
y2k_compliance boolean
Assegura compatibilidade com ano 2000 (irá causar problemas com navegadores não compatíveis)
allow_call_time_pass_reference boolean

Define se irá alertar ou não quando argumentos são passados por referência durante chamadas de funções. O método recomendado para especificar quais argumentos deveriam ser passados por referência é na declaração da função. É recomendado tentar desabilitar esta opção e certificar-se de que seus scripts funcionam corretamente com a opção desabilitada a fim de garantir que eles irão funcionar em futuras versões da linguagem (será emitido um alerta sempre que este recurso for usado).

Passar argumentos por referência em chamadas de função foi reprovado por razões de limpeza de código. Uma função pode modificar seus argumentos de uma forma não documentada se não foi declarado que o argumento deve ser passado por referência. Para previnir efeitos colaterais é melhor especificar quais argumentos são passados por referência apenas na declaração da função.

Veja também Explicação sobre Referências.

Changelog de allow_call_time_pass_reference
Versão Descrição
5.4.0 Removida do PHP.
5.3.0 Emite um erro do nível E_DEPRECATED.
5.0.0 Obsoleta, gera um erro do nível E_COMPILE_WARNING.

expose_php boolean

Expõe para o mundo que o PHP está instalado no servidor, o que inclui a versão do PHP dentro do header HTTP (por exemplo, X-Powered-By: PHP/5.3.7). Antes do PHP 5.5.0 os GUIDs do logotipo do PHP também eram expostos, portanto adicioná-los à URL do seu script PHP iria exibir o logotipo apopriado (por exemplo, » http://www.php.net/?=PHPE9568F34-D428-11d2-A769-00AA001ACF42). Isto também afetava a saída da função phpinfo(), como quando desabilitada, o logotipo PHP e as informações de créditos não seriam mostrados.

Nota:

Desde o PHP 5.5.0, estes GUIDs e a função php_logo_guid() foram removidos do PHP e os GUIDs foram substituídos por URIs de dados. Portanto, acessar o logotipo PHP adicionando o GUID ao URL não funciona mais. Da mesma forma, desativar expose_php não afetará a exibição do logotipo PHP na função phpinfo().

Veja também php_logo_guid() e phpcredits().

disable_functions string

Esta diretiva permite desabilitar certas funções por razões de segurança. Ela recebe uma lista de nomes de funções separados por vírgula. disable_functions não é afetada pelo Modo Seguro.

Apenas funções internas podem ser desabilitadas usando esta diretiva. Funções definidas pelo usuário não são afetadas.

Esta diretiva deve ser configurada no php.ini. Por exemplo, ela não pode ser configurada no httpd.conf.

disable_classes string
Esta diretiva permite desabilitar certas classes por razões de segurança. Ela recebe uma lista de nomes de classe separados por vírgula. disable_classes não é afetada pelo Modo Seguro. Esta diretiva deve ser configurada no php.ini. Por exemplo, ela não pode ser configurada no httpd.conf.
zend.assertions integer
Quando configurada para 1, codigo assertivo será gerado e executado (modo de desenvolvimento). Quando configurada para 0 então código assertivo será gerado mas ignorado (não executado) em tempo de execução. Quando configurada para -1 código assertivo não será gerado, tornando as asserções sem custo (modo de produção).

Nota:

Se um processo é iniciado em modo de produção, zend.assertions não poderá ser modificada em tempo de execução, já que o código para as asserções não foi gerado.

Se um processo é iniciado em modo de desenvolvimento, zend.assertions não poderá ser configurada para -1 em tempo de execução.

zend.ze1_compatibility_mode boolean

Ativa o modo de compatibilidade com Zend Engine 1 (PHP 4). Afeta a clonagem, conversão (objetos sem propriedades são convertidos para FALSE ou 0) e a comparação de objetos. Neste modo, objetos são passados por valor em vez de referência por padrão.

Veja também seção entitulada Migrando do PHP 4 para o PHP 5.

Aviso

Este recurso se tornou OBSOLETO e foi REMOVIDO a partir do PHP 5.3.0.

zend.multibyte boolean

Permite a interpretação de arquivos fontes em codificações multibyte. Habilitar zend.multibyte é necessário para utilizar codificações de caracteres como SJIS, BIG5, etc., que contém caracteres especiais em dados de strings multibyte. Codificações compatíveis com ISO-8859-1 como UTF-8, EUC, etc. não requerem esta opção.

Habilitar o zend.multibyte requer que a extensão mbstring esteja disponível.

zend.script_encoding string

Este valor vai ser usado a menos que uma diretiva declare(encoding=...) apareça no início do script. Quando uma codificação incompatível com ISO-8859-1 é usada, ambas zend.multibyte e zend.script_encoding devem ser usadas.

Strings literais serão transliteradas de zend.script_encoding para mbstring.internal_encoding, como se a função mb_convert_encoding() tivesse sido chamada.

zend.detect_unicode boolean

Verifica o BOM (Byte Order Mark) e determina se o arquivo contém caracteres multibyte válidos. Essa detecção é realizada antes do processamento de __halt_compiler(). Disponível apenas no modo Zend Multibyte.

zend.signal_check boolean

Para verificar se há manipuladores de sinais substituídos no encerramento.

exit_on_timeout boolean

Esta é uma diretiva unicamente do módulo mod_php do Apache1 que força um subprocesso do Apache a sair se ocorrer o timeout de execução do PHP. Esse timeout causa uma chamada interna a longjmp() no Apache1 que pode deixar algumas extensões em um estado inconsistente. Ao terminar o processo, quaisquer bloqueios ou memória pendentes serão liberados.

Limite de Recursos

Limite de Recursos
Nome Padrão Modificável Changelog
memory_limit "128M" PHP_INI_ALL "8M" antes do PHP 5.2.0, "16M" no PHP 5.2.0

Uma rápida explicação das diretivas de configuração.

memory_limit integer

Define a quantidade máxima de memória em bytes que um script está permitido a alocar. Isto ajuda a previnir que scripts mal escritos consumam toda a memória disponível no servidor. Note que para que não haja limite de memória, esta diretiva deve ser configurada para -1.

Antes do PHP 5.2.1, para utilizar esta diretiva ela precisava ser habilitada em tempo de compilação usando --enable-memory-limit na linha de configuração. Esta flag de tempo de compilação também era necessária para definir as funções memory_get_usage() e memory_get_peak_usage() em versões anteriores à 5.2.1.

Quando um integer é utilizado, o valor é medido em bytes. A resumida notação, como descrito neste FAQ, pode também ser usada.

Veja também: max_execution_time.

Ajuste de Desempenho

Ajuste de Desempenho
Nome Padrão Modificável Changelog
realpath_cache_size "16K" PHP_INI_SYSTEM Disponível a partir do PHP 5.1.0.
realpath_cache_ttl "120" PHP_INI_SYSTEM Disponível a partir do PHP 5.1.0.

Uma rápida explicação das diretivas de configuração.

realpath_cache_size integer

Determina o tamanho do cache do realpath a ser usado pelo PHP. Este valor deve ser aumentado em sistemas onde o PHP abre muitos arquivos, para refletir a quantidade das operações de arquivo realizadas.

O tamanho representa o número total de bytes nas strings de caminhos armazenadas, mais o tamanho dos dados associados à entrada de cache. Isto significa que para armazenar caminhos mais longos no cache, o tamanho de cache deve ser maior. Esse valor não controla diretamente o número de caminhos distintos que podem ser armazenados em cache.

O tamanho necessário para os dados da entrada de cache depende do sistema operacional.

realpath_cache_ttl integer

Duração do tempo (em segundos) pela qual armazenar em cache as informações do realpath para um dado arquivo ou diretório. Para sistemas com arquivos que raramente mudam, considere aumentar o valor.

Manipulação de Dados

Opções de Configuração de Manipulação de Dados
Nome Padrão Modificável Changelog
arg_separator.output "&" PHP_INI_ALL  
arg_separator.input "&" PHP_INI_PERDIR  
variables_order "EGPCS" PHP_INI_PERDIR PHP_INI_ALL no PHP <= 5.0.5.
request_order "" PHP_INI_PERDIR Disponível a partir do PHP 5.3.0.
auto_globals_jit "1" PHP_INI_PERDIR Disponível a partir do PHP 5.0.0.
register_globals "0" PHP_INI_PERDIR Removida no PHP 5.4.0.
register_argc_argv "1" PHP_INI_PERDIR  
register_long_arrays "1" PHP_INI_PERDIR Obsoleta no PHP 5.3.0. Removida no PHP 5.4.0.
enable_post_data_reading "1" PHP_INI_PERDIR Disponível a partir do PHP 5.4.0.
post_max_size "8M" PHP_INI_PERDIR  
auto_prepend_file NULL PHP_INI_PERDIR  
auto_append_file NULL PHP_INI_PERDIR  
default_mimetype "text/html" PHP_INI_ALL  
default_charset "UTF-8" PHP_INI_ALL Por padrão, "UTF-8" desde o PHP >= 5.6.0; vazio no PHP < 5.6.0.
always_populate_raw_post_data "0" PHP_INI_PERDIR Removida no PHP 7.0.0.

Uma rápida explicação das diretivas de configuração.

arg_separator.output string

O separador usado em URLs gerados pelo PHP para separar argumentos.

arg_separator.input string

Lista de separadores usados pelo PHP para interpretar URLs de entrada em variáveis.

Nota:

Cada caracter nesta diretiva é considerado como separador!

variables_order string

Configura a ordem de interpretação das variáveis EGPCS (Environment, Get, Post, Cookie e Server). Por exemplo, se variables_order estiver configurada como "SP" então o PHP irá criar as variáveis superglobals $_SERVER e $_POST, mas não irá criar $_ENV, $_GET e $_COOKIE. Configurar como "" significa que nenhuma superglobals será definida.

Se a diretiva obsoleta register_globals estiver ativada, então variables_order também configura a ordem em que as variáveis ENV, GET, POST, COOKIE e SERVER são preenchidas no escopo global. Então, por exemplo, se variables_order estiver configurada como "EGPCS", register_globals estiver ativada e ambas $_GET['action'] e $_POST['action'] estão definidas, então $action conterá o valor de $_POST['action'] pois P vem depois de G no valor da diretiva do nosso exemplo.

Aviso

Em ambas as SAPIs CGI e FastCGI, $_SERVER é também preenchido por valores do ambiente; S é sempre equivalente à ES independentemente da localização de E em outros lugares nesta diretiva.

Nota:

O conteúdo e ordem de $_REQUEST é também afetado por esta diretiva.

request_order string

Esta diretiva descreve a ordem na qual o PHP registra as variáves GET, POST e Cookie no array _REQUEST. O registro é feito da esquerda para direita, valores mais recentes sobrescrevem os valores antigos.

Se esta diretiva não está definida variables_order é usada para o conteúdo de $_REQUEST.

Note que os arquivos php.ini da distribuição padrão não contêm o 'C' para cookies, por motivos de segurança.

auto_globals_jit boolean

Quando ativada, as variáveis SERVER, REQUEST e ENV são criadas quando elas são usadas pela primeira vez ("Just In Time") ao invés de quando o script inicia. Se estas variáveis não são usadas dentro de um script, habilitar esta diretiva resultará em um ganho de desempenho.

As diretivas PHP register_globals, register_long_arrays e register_argc_argv devem ser desabilitadas para que esta diretiva tenha algum efeito. Desde o PHP 5.1.3 não é necessário ter register_argc_argv desabilitada.

Aviso

O uso das variáveis SERVER, REQUEST e ENV é verificado durante o tempo de compilação então usá-las em, por exemplo, variáveis variáveis não causará sua inicialização.

register_globals boolean

Registra ou não as variáveis EGPCS (Environment, GET, POST, Cookie, Server) como variáveis globais.

A partir do » PHP 4.2.0, essa diretiva por padrão está desabilitada.

Veja o capitulo sobre segurança Utilizando register_globals para informações relacionadas.

Note que register_globals não pode ser definida em tempo de execução (ini_set()). Entretanto, você pode utilizar .htaccess caso seu host permita, como descrito acima. Um exemplo de como ficaria o .htaccess: php_flag register_globals off.

Nota:

register_globals é afetada pela diretiva variables_order .

Aviso

Esta funcionalidade tornou-se OBSOLETA desde o PHP 5.3.0 e foi REMOVIDA desde o PHP 5.4.0.

register_argc_argv boolean
Informa ao PHP se deve declarar variáveis argv & argc (que podem conter as informações das requisições GET). Veja também PHP em linha de comando.
register_long_arrays boolean
Informa ao PHP se deve ou não registrar as obsoletas variáveis predefinidas longas do tipo $HTTP_*_VARS. Quando habilitada (padrão), as variáveis PHP predefinidas longas como $HTTP_GET_VARS serão preenchidas. Se você não as está usando, é recomendado desabilitar esta diretiva por razões de performance. Em vez disso utilize os arrays superglobais como $_GET. Esta diretiva se tornou disponível no PHP 5.0.0.
Aviso

Esta funcionalidade tornou-se OBSOLETA desde o PHP 5.3.0 e foi REMOVIDA desde o PHP 5.4.0.

enable_post_data_reading boolean
Desabilitar esta opção faz com que $_POST e $_FILES não sejam preenchidos. A única forma de ler dados postados será através do stream wrapper php://input. Isto pode ser útil para intermediar requisições ou para processar dados POST de uma maneira eficiente em termos de memória alocada.
post_max_size integer
Configura o tamanho máximo dos dados postados. Esta configuração também afeta o upload de arquivos. Para carregar arquivos grandes este valor deve ser maior que upload_max_filesize. De maneira geral memory_limit deve ser maior que post_max_size. Quando um integer é utilizado, o valor é medido em bytes. A resumida notação, como descrito neste FAQ, pode também ser usada. Se o tamanho dos dados postados for maior que post_max_size então as variáveis superglobals $_POST e $_FILES ficarão vazias. Isto pode ser observado de várias maneiras, por exemplo, passando uma variável $_GET ao script que processará os dados, i.e. <form action="edit.php?processed=1">, e então verificando se $_GET['processed'] está preenchida.

Nota:

O PHP permite sufixos para valores em bytes, incluindo K (kilo), M (mega) e G (giga). O PHP fará as conversões automaticamente se você utilizar qualquer um destes. Cuidado para não exceder o limite de inteiros sinalizados de 32 bit (ao usar versões de 32 bit) uma vez que isso fará o script falhar.

Changelog de post_max_size
Versão Descrição
5.3.4 post_max_size = 0 não irá desabilitar o limite quando o conteúdo for do tipo application/x-www-form-urlencoded ou não estiver registrado no PHP.
5.3.2 , 5.2.12 Permite tamanho ilimitado de dados postados ao configurar post_max_size como 0.

auto_prepend_file string

Especifica o nome de um arquivo que é automaticamente interpretado antes do arquivo principal. O arquivo é incluído como se tivesse sido chamado com require, então include_path é utilizado.

O valor especial none desativa a auto-inclusão.

auto_append_file string

Especifica o nome de um arquivo que é automaticamente interpretado depois do arquivo principal. O arquivo é incluído como se tivesse sido chamado com require, então include_path é utilizado.

O valor especial none desativa a auto-inclusão.

Nota: Se o script for terminado com exit(), então a auto-inclusão não ocorrerá.

default_mimetype string

Por padrão o PHP irá imprimir um tipo de mídia utilizando o header Content-Type. Para desabilitar o envio da codificação configure esta opção como vazio.

O padrão interno do PHP é o media type text/html.

default_charset string

A partir do PHP 5.6, "UTF-8" é o valor padrão e o valor desta diretiva é utilizado como a codificação de caracteres padrão para htmlentities(), html_entity_decode() e htmlspecialchars() se o parâmetro encoding for omitido. O valor de default_charset também será utilizado para configurar o character set padrão para as funções iconv se as opções de configuração iconv.input_encoding, iconv.output_encoding e iconv.internal_encoding não estiverem definidas, e também para as funções mbstring se mbstring.http_input mbstring.http_output e mbstring.internal_encoding não estiverem definidas.

Todas as versões do PHP usarão este valor como o charset no header padrão Content-Type enviado pelo PHP caso o header não seja sobrescrito por uma chamada à função header().

Configurar default_charset para um valor vazio não é recomendado.

input_encoding string

Disponível desde o PHP 5.6.0. Esta configuração é utilizada por módulos multibyte como mbstring e iconv. O padrão é vazio.

output_encoding string

Disponível desde o PHP 5.6.0. Esta configuração é utilizada por módulos multibyte como mbstring e iconv. O padrão é vazio.

internal_encoding string

Disponível desde o PHP 5.6.0. Esta configuração é utilizada por módulos multibyte como mbstring e iconv. O padrão é vazio. Se vazio default_charset é utilizado.

always_populate_raw_post_data mixed
Aviso

Este recurso está OBSOLETO desde o PHP 5.6.0, e REMOVIDO desde o PHP 7.0.0.

Se configurada para TRUE, o PHP sempre preencherá $HTTP_RAW_POST_DATA com os dados POST brutos. Caso contrário a variável é preenchida somente quando o MIME type dos dados não é reconhecido.

O método recomendado de acessar dados POST brutos é php://input, e $HTTP_RAW_POST_DATA está obsoleta a partir do PHP 5.6.0. Configurar always_populate_raw_post_data para -1 irá optar pelo novo comportamento que será implementado numa futura versão do PHP, na qual $HTTP_RAW_POST_DATA nunca é definida.

Independente da configuração, $HTTP_RAW_POST_DATA não está disponível quando enctype="multipart/form-data".

Veja também: magic_quotes_gpc, magic_quotes_runtime, e magic_quotes_sybase.

Caminhos e Diretórios

Caminhos e Opções de Configuração de Diretórios
Nome Padrão Modificável Changelog
include_path ".;/path/to/php/pear" PHP_INI_ALL  
open_basedir NULL PHP_INI_ALL PHP_INI_SYSTEM no PHP < 5.3.0.
doc_root NULL PHP_INI_SYSTEM  
user_dir NULL PHP_INI_SYSTEM  
extension_dir "/path/to/php" PHP_INI_SYSTEM  
extension NULL Apenas no php.ini  
zend_extension NULL Apenas no php.ini  
zend_extension_debug NULL Apenas no php.ini Disponível antes do PHP 5.3.0.
zend_extension_debug_ts NULL Apenas no php.ini Disponível antes do PHP 5.3.0.
zend_extension_ts NULL Apenas no php.ini Disponível antes do PHP 5.3.0.
cgi.check_shebang_line "1" PHP_INI_SYSTEM Disponível a partir do PHP 5.2.0.
cgi.discard_path "0" PHP_INI_SYSTEM Disponível a partir do PHP 5.3.0.
cgi.fix_pathinfo "1" PHP_INI_SYSTEM PHP_INI_ALL antes do PHP 5.2.1.
cgi.force_redirect "1" PHP_INI_SYSTEM PHP_INI_ALL antes ao PHP 5.2.1.
cgi.nph "0" PHP_INI_SYSTEM Disponível a partir do PHP 5.3.0.
cgi.redirect_status_env NULL PHP_INI_SYSTEM PHP_INI_ALL antes do PHP 5.2.1.
cgi.rfc2616_headers "0" PHP_INI_ALL  
fastcgi.impersonate "0" PHP_INI_SYSTEM PHP_INI_ALL antes do PHP 5.2.1.
fastcgi.logging "1" PHP_INI_SYSTEM PHP_INI_ALL antes do PHP 5.2.1.

Uma rápida explicação das diretivas de configuração.

include_path string

Especifica uma lista de diretórios onde as funções require, include, fopen(), file(), readfile() e file_get_contents() procuram por arquivos. O formato é como a variável de ambiente PATH: uma lista de diretórios separados por vírgula nos Unix ou ponto e vírgula no Windows.

O PHP considera cada item no include_path separadamente ao procurar por arquivos para incluir. Ele irá verificar o primeiro caminho, e se não o encontrar, verificar o próximo caminho, até que encontre o arquivo incluído ou retorne com um warning ou um error. Você pode modificar ou configurar o include_path em tempo de execução usando set_include_path().

Exemplo #1 include_path no Unix

include_path=".:/php/includes"

Exemplo #2 include_path no Windows

include_path=".;c:\php\includes"

Utilizar um . no include_path permite inclusões relativas ao diretório atual. Entretanto é mais eficiente utilizar explicitamente include './arquivo' em vez de fazer o PHP sempre procurar no diretório atual em cada include.

Nota:

Variáveis ENV também estão acessíveis em arquivos .ini. Assim é possível referenciar o diretório home utilizando ${LOGIN} e ${USER}.

Variáveis de ambiente podem variar entre APIs de servidor já que esses ambientes podem ser diferentes.

Exemplo #3 include_path do Unix utilizando a variável de ambiente ${USER}

include_path = ".:${USER}/pear/php"

open_basedir string

Limita os arquivos que podem ser acessados pelo PHP para a árvore de diretório especificada, incluindo o próprio arquivo. Esta diretiva NÃO é afetada se o Modo Seguro está habilitado ou desabilitado.

Quando um script tenta acessar o sistema de arquivos, por exemplo utilizando include ou fopen(), a localização do arquivo é verificada. Quando o arquivo está fora da árvore de diretório especificada, o PHP se recusará a acessá-lo. Todos os links simbólicos são resolvidos, então não é possível evitar esta restrição com um link simbólico. Se o arquivo não existe então o link simbólico não pode ser resolvido e o nome do arquivo é comparado a um open_basedir (resolvido).

open_basedir pode afetar mais que apenas as funções de sistema de arquivos; por exemplo se o MySQL está configurado para utilizar os drivers mysqlnd, LOAD DATA INFILE será afetado por open_basedir . Grande parte da funcionalidade extendida do PHP utiliza open_basedir desta maneira.

O valor especial . indica que o diretório atual do script será utilizado como o diretório base. Isto é, no entanto, perigoso pois o diretório atual do script pode ser facilmente alterado com chdir().

No httpd.conf open_basedir pode ser desabilitada (por exemplo, em alguns hosts virtuais) da mesma forma que quaisquer outras diretivas de configuração com "php_admin_value open_basedir none".

No Windows os diretórios são separados com um ponto e vírgula. Em todos os outros sistemas os diretórios são separados com dois pontos. Como um módulo Apache os caminhos de open_basedir de diretórios pai agora são automaticamente herdados.

A restrição especificada com open_basedir é um nome de diretório desde o PHP 5.2.16 e 5.3.4. Versões anteriores o usavam como um prefixo. Isto significa que "open_basedir = /dir/incl" também permitia acessar "/dir/include" e "/dir/incls" caso existissem. Quando desejar restringir o acesso apenas ao diretório especificado termine o caminho com uma barra. Por exemplo: open_basedir = /dir/incl/

O padrão é permitir que todos os arquivos sejam abertos.

Nota:

A partir do PHP 5.3.0 open_basedir pode ser afunilado em tempo de execução. Isto significa que se open_basedir é configurado para /www/ no php.ini então um script pode restringir a configuração para /www/tmp/ em tempo de execução com ini_set(). Ao listar vários diretórios é possível utilizar a constante PATH_SEPARATOR como um separador independentemente do sistema operacional.

doc_root string

O "diretório raiz" do PHP no servidor. Utilizado apenas se não estiver vazio. Se o PHP estiver configurado com safe mode então nenhum arquivo fora deste diretório será servido. Se o PHP não foi compilado com FORCE_REDIRECT, você deve configurar doc_root se estiver rodando o PHP em modo CGI em qualquer servidor web (diferente do IIS). A alternativa é utilizar a configuração cgi.force_redirect abaixo.

user_dir string

O nome base do diretório utilizado como diretório home do usuário pelos arquivos do PHP, por exemplo public_html .

extension_dir string

O diretório no qual o PHP deve procurar por extensões carregadas dinamicamente. Veja também: enable_dl e dl().

extension string

Quais extensões carregáveis dinamicamente carregar quando o PHP inicia.

zend_extension string

Nome da extensão Zend carregável dinamicamente (por exemplo APD) a carregar quando o PHP inicia.

zend_extension_debug string

Variante de zend_extension para extensões compiladas com informação de debug antes ao PHP 5.3.0.

zend_extension_debug_ts string

Variante de zend_extension para extensões compiladas com informação de debug e thread safety antes ao PHP 5.3.0.

zend_extension_ts string

Variante de zend_extension para extensões compiladas com thread safety antes ao PHP 5.3.0.

cgi.check_shebang_line boolean

Controla se o CGI PHP verifica linhas iniciando com #! (shebang) no início do script em execução. Esta linha pode ser necessária se o script suporta execução tanto como script autônomo e via PHP CGI. O PHP em modo CGI pula esta linha e ignora seu conteúdo se esta diretiva estiver habilitada.

cgi.discard_path boolean

Se habilitada, o binário CGI PHP pode ser colocado com segurança fora da árvore de diretório web e não será possível de contornar a segurança .htaccess.

cgi.fix_pathinfo boolean

Fornece suporte real a PATH_INFO/ PATH_TRANSLATED para CGI. O comportamento anterior do PHP era definir PATH_TRANSLATED como SCRIPT_FILENAME e não perceber o que PATH_INFO é. Para mais informações sobre PATH_INFO, veja as especificações do modo CGI. Configurar esta diretiva para 1 fará o modo CGI corrigir seus caminhos para obedecer à especificação. Configurar com zero faz o PHP se comportar como antes. Ela é habilitada por padrão. Você deve corrigir seus scripts de forma a usar SCRIPT_FILENAME ao invés de PATH_TRANSLATED.

cgi.force_redirect boolean

cgi.force_redirect é necessário para prover segurança ao rodar o PHP em modo CGI na maioria dos servidores web. Se deixada indefinida, o PHP irá habilitá-la por padrão. Você pode desabilitá-la por sua conta e risco.

Nota:

Usuários do Windows: Ao utilizar o IIS esta opção deve ser desligada. O mesmo vale para servidores OmniHTTPD e Xitami.

cgi.nph boolean

Se cgi.nph estiver habilitada, forçará o cgi a enviar sempre Status: 200 em todas as requisições.

cgi.redirect_status_env string

Se cgi.force_redirect estiver habilitada e você não está rodando sob servidores Apache ou Netscape (iPlanet), você pode precisar configurar um nome de variável de ambiente que o PHP irá procurar para saber que é correto continuar a execução.

Nota:

Configurar esta variável pode causar problemas de segurança, tenha certeza do que está fazendo antes de alterar.

cgi.rfc2616_headers int

Indica ao PHP qual o tipo de headers usar ao enviar o código de resposta HTTP. Se configurada para 0 o PHP envia um header "Status:" da » RFC 3875 que é suportado pelo Apache e outros servidores web. Quando esta opção é configurada para 1 o PHP enviará headers em conformidade com a » RFC 2616.

Se esta opção estiver habilitada e o PHP estiver rodando em um ambiente CGI (por exemplo, PHP-FPM) não devem ser utilizados headers de resposta de status HTTP no padrão RFC 2616, em vez disso deve ser usado o seu equivalente RFC 3875, por exemplo, em vez de header("HTTP/1.0 404 Not found"); deve ser usado header("Status: 404 Not Found");.

Deixe-a configurada para 0 a não ser que saiba exatamente o que está fazendo.

fastcgi.impersonate string

O FastCGI rodando no IIS (em sistemas baseados em WINNT) suporta a habilidade de representar os tokens de segurança do cliente que faz a requisição. Isso permite ao IIS definir o contexto de segurança no qual a requisição executa. O mod_fastcgi rodando no Apache atualmente não suporta esta funcionalidade (17/03/2002) Configure para 1 ao rodar no ISS. O padrão é zero.

fastcgi.logging boolean

Ativa o logging do SAPI ao utilizar o FastCGI. O padrão é habilitar o logging.

Upload de Arquivos

Opções de Configurações de Upload de Arquivos
Nome Padrão Modificável Changelog
file_uploads "1" PHP_INI_SYSTEM  
upload_tmp_dir NULL PHP_INI_SYSTEM  
max_input_nesting_level 64 PHP_INI_PERDIR Disponível a partir do PHP 5.3.9.
max_input_vars 1000 PHP_INI_PERDIR Disponível a partir do PHP 5.3.9.
upload_max_filesize "2M" PHP_INI_PERDIR  
max_file_uploads 20 PHP_INI_SYSTEM Disponível a partir do PHP 5.2.12.

Uma rápida explicação das diretivas de configuração.

file_uploads boolean

Permite ou não upload de arquivos através do HTTP. Veja também as diretivas upload_max_filesize, upload_tmp_dir e post_max_size.

upload_tmp_dir string

O diretório temporário utilizado para armazenar arquivos durante o upload. Precisa ter permissão de escrita para qualquer usuário que o PHP esteja usando para rodar. Se não especificado o PHP usará o padrão de sistema.

Se o diretório especificado aqui não tiver permissão de escrita, o PHP tenta o diretório temporário padrão do sistema. Se open_basedir estiver habilitado então o diretório padrão do sistema deve ser permitido para que o upload tenha sucesso.

upload_max_filesize integer

O tamanho máximo de um arquivo enviado.

Quando um integer é utilizado, o valor é medido em bytes. A resumida notação, como descrito neste FAQ, pode também ser usada.
max_file_uploads integer

O número máximo de arquivos permitidos simultaneamente durante um upload. A partir do PHP 5.3.4 os campos de upload deixados em branco no envio não contam para este limite.

SQL Geral

Opções de Configurações Gerais de SQL
Nome Padrão Modificável Changelog
sql.safe_mode "0" PHP_INI_SYSTEM  

Uma rápida explicação das diretivas de configuração.

sql.safe_mode boolean

Se habilitada as funções de conexão de bancos de dados que especifiquem valores padrão usarão esses valores no lugar de quaisquer argumentos passados pelo usuário. Para detalhes sobre os valores padrão, veja a documentação das funções de conexão relevantes.

Windows

Opções de Configurações Específicas do Windows
Nome Padrão Modificável Changelog
windows.show_crt_warning "0" PHP_INI_ALL Disponível a partir do PHP 5.4.0.

Uma rápida explicação das diretivas de configuração.

windows.show_crt_warning boolean

Esta diretiva exibe os alertas CRT do Windows quando habilitada. Estes alertas eram exibidos por padrão até o PHP 5.4.0.

add a note add a note

User Contributed Notes 20 notes

up
19
csg at DEL_THISdiatom dot de
12 years ago
Starting with PHP 4.4.0 (at least PHP version 4.3.10 did have old, documented behaviour) interpretation of value of "session.save_path" did change in conjunction with "save_mode" and "open_basedir" enabled.

Documented ( http://de.php.net/manual/en/ref.session.php#ini.session.save-path ):
  Values of "session.save_path" should or may be  **without**  ending slash.
  For instance:
<?php
 
// Valid only  *before* PHP 4.4.0:
 
ini_set( "session.save_path", "/var/httpd/kunde/phptmp" );
?> will mean:
  The directory "/var/httpd/kunde/phptmp/" will be used to write data and therefore must be writable by the web server.

Starting with PHP 4.4.0 the server complains that "/var/httpd/kunde/" is not writable.
Solution: Add an ending slash in call of ini_set (or probably whereever you set "session.save_path"), e.g.:
<?php
 
// Note the slash on ".....phptmp/":
 
ini_set( "session.save_path", "/var/httpd/kunde/phptmp/" );
?>

Hope, that does help someone.
up
3
fernandobasso dot br at gmail dot com
1 year ago
This might help in case someone happens to maintain old applications with a charset other than utf-8.

According to the docs, you can override the default charset if you use `header()`.

Suppose php.ini sets the default_charset to "UTF-8", but you need a legacy charset, like ISO-8859-1.

Still,

<?php header('Content-Type: text/html; Charset=ISO-8859-1'); ?>

would not override the charset, just add it as well and the result
was a response header like (note the two charsets):

    Content-Type:"text/html; Charset=ISO-8859-1;charset=UTF-8"

I found it strange the default one as `charset` with a lowercase `c`
as opposed to my custom charset with an uppercase `C`.

What solved was to _override_ the charset using all lowercase letters
as well for the word “charset”:

<?php header('content-type: text/html; charset=ISO-8859-1'); ?>

Then, the double charset from the response headers disappeared, and only the single, custom charset remained.
up
1
abc500x500 at gmail dot com
2 months ago
Please illuminate this:
memory_limit=128mb meaning which?

1-per script only then if in a moment 1000 user request php script maximum only 128mb of server ram use6 by script.
2-per script + per user if in a moment 1000 user request a php script about 1000*128mb=128gb ram use by script.
Thanks
up
6
dougal at gunters dot org
1 year ago
It appears that if you use both the 'include_path' directives and 'open_basedir', that file searches will hit the include path *first*, before local files. But if 'open_basedir' is not in use, then local files are found first. For example, suppose you have code in '/var/www/myfile.php' which does:

<?php
 
require_once('config.php');
?>

Further, assume that there is a local file '/var/www/config.php', and there is also a file '/var/local/php/config.php'.

Next, if your php.ini has:

  include_path = /var/local/php/

Normally, this would look for '/var/www/config.php' first, and if not found, then it would try '/var/local/php/config.php'.

But if you also have this in php.ini:

  open_basedir = /var/www/:/var/local/php/

Then the require would reverse the order of the search, and load '/var/local/php/config.php', even when the local 'config.php' file exists.

Furthermore, if include_path contains directories not in open_basedir, you can end up with a fatal error. For example, change the directive to:

  open_basedir = /var/www/:/var/local/includes/php/

Now the require will first find '/var/local/php/config.php' from the include_path, try to include it, but be unable to because of the open_basedir restrictions.
up
8
rlammers at linuxmail dot org
6 years ago
This is a possible solution for a problem which seems to be a php-ini-problem but is not.

If a $_POST is used with large fields e.g. textarea's with more than 120kb characters php returns a blank screen, even if the max_post_size is 8M.

This problem may be caused by an apache-module SecFilter.

Adding the following lines to the .htaccess solves the problem.
SecFilterEngine Off
SecFilterScanPOST Off

I know this is not a php-issue, but i'm still posting it here since it looks like it is a php-problem and I did not find any sites or forums offering this solution.
up
6
AntonioK
6 years ago
Note that there is no way to disable eval() work by using disable_functions directive, because eval() is a language construct and not a function.

Many people advise to disable such potentially-insecure functions like system(), exec(), passthru(), eval() and so on in php.ini when not running in safe mode, but eval() would still work even it listed in disable_functions.
up
3
mrok at mrok dot com
8 years ago
Note that on some Unix systems (i.e. PHP 5.1.6 on Centos 5.2) include_path in php.ini should NOT be quoted.

For example, instead of

include_path='.:/usr/share/php'

use

include_path=.:/usr/share/php

Using quotes does not cause any error message, but all of your require_once() directives will fail (indicating that file could not be opened) - unless full path to target file is provided.
up
2
leo at korfu dot cz
11 years ago
"If the size of post data is greater than post_max_size..."

It seems that a more elegant way is comparison between post_max_size and $_SERVER['CONTENT_LENGTH']. Please note that the latter includes not only size of uploaded file plus post data but also multipart sequences. Leo
up
1
amolitor at molitor-design dot com
7 years ago
Amusingly, the include_path logically includes the current directory of the running file as the last entry all the time anyways, so part of the business about shoving "." into the include_path is spurious -- it's "there" on the end all the time, at least in the 5.2.12 source (see main/fopen_wrappers.c around line 503).

This one had me goin' for a while.
up
0
txyoji at yahoo dot com
4 years ago
If you enable "open_basedir" option, it will disable the realpath_cache. This can be a significant performance hit.

https://bugs.php.net/bug.php?id=53263
up
-1
iko at vision dot sk
5 years ago
auto_globals_jit setting is also affecting $_REQUEST superglobal in 5.3 It is not explicitly stated in documentation.
up
-1
Adam
9 months ago
Remember that `open_basedir` restriction does not affect exec functions. As long as you do not disable exec functions (see `disable_functions`, users will be able to use `exec("/bin/cat [...]")` to access sensitive world readable files.
up
-2
kghbln
6 years ago
Adding multiple directories to open_basedir:

open_basedir = "/var/www/htdocs/:/var/www/tmp/" adds both paths /var/www/htdocs/ and /var/www/tmp/. Do not forget the trailing slash, otherwise the last directory will be considered as a prefix (< 5.3.4).

On Windows you use ; as the seperator.
up
-5
michael dot buergi at gmx dot net
4 years ago
the ini-setting "detect_unicode" is indeed "zend.detect_unicode" (according to the phpinfo of my 5.4.4)
up
-6
lanny at freemail dot hu
10 years ago
register_long_arrays has a very odd behavior (at least in PHP 5.2):

With register_long_arrays=Off the $GLOBALS array will not contain [_SERVER] and [_REQUEST]. They are accessible as superglobals ($_SERVER, $_REQUEST), but they disappear from the $GLOBALS array!
up
-6
david dot tulloh at infaze dot com dot au
12 years ago
I did a little experimentation on the behaviour of auto_prepend_file as the order of access wasn't clear to me from the documentation.

1. Apache checks to see if the target file exists.
2. The prepend file is called
3. The target file is called

This means that you can use auto_prepend_file to change the target file before you access it however you can't generate new files.
up
-17
JL
6 years ago
If you need to use a path in your include_path that has a space in it - I found that I could make it work (in windows anyway) by setting a path like this
L:\Information Technology\Resources\lib\
in the include path like this listed below

include_path = ".;L:\Information" " Technology\Resources\lib\"
up
-18
Steven Hartland
5 years ago
default_charset doesn't always set the charset for all content types, it appears to only do so for some known ones such as text/html.

If your using other content type's ensure you set the charset manually.

Tested on php 5.3.10 with application/json
up
-38
Manu
12 years ago
Warning, if you change upload_max_filesize, please note that both post_max_size and memory_limit directives may have to change too.
up
-29
Mohammad Hossein Darvishanpour
1 year ago
for upload :
file_uploads = On
upload_tmp_dir = " "
upload_max_filesize = 200M
max_file_uploads = 100      //Number
post_max_size = 8M

for error :
error_reporting = E_ALL
display_errors = Off
log_errors = On
error_log = error.log

for buffering :
output_buffering = on

for function :
disable_functions=exec,passthru,shell_exec,system,proc_open,popen
,curl_exec,curl_multi_exec,parse_ini_file,show_source
To Top