Isso ocorre porque o PHP tem vários lugares onde a configuração pode ser definida. Embora eu tivesse uma idéia da precedência dessas configurações, decidi testá-las experimentalmente para ter certeza do que vou dizer nesta resposta.
Então, aqui está uma lista desses lugares, do mais global ao mais específico. Cada configuração abaixo da lista pode substituir uma configuração anterior.
-
O arquivo de configuração do php.ini . No caso do Ubuntu existem dois deles, o /etc/php5/apache2/php.ini é o usado para o módulo php apache. Isso terá um efeito global em todos os hosts virtuais.
-
O diretório conf.d . Na verdade, nem todas as instalações terão essa configuração modularizada, mas no caso do Ubuntu está localizado em /etc/php5/apache2/conf.d para o módulo do apache. Qualquer arquivo adicionado neste diretório será adicionado à configuração principal do php.ini com maior precedência do que o php.ini. Em outras palavras, qualquer configuração aqui irá sobrescrever as configurações no php.ini - eu testei adicionando um error.ini. Isso terá um efeito global em todos os hosts vituais.
-
Configuração do host virtual Apache . Geralmente configurado em / etc / apache2 / sites-available, cada host virtual pode ter configurações diferentes. Dentro da tag VirtualHost é possível incluir "php_value error_reporting", onde value é o resultado numérico das operações booleanas nas constantes. Nesta configuração, na verdade, não é permitido usar as constantes mnemônicas, mas apenas um valor numérico. Isso afetará apenas um único host virtual. Ele substituirá as configurações acima.
-
.htaccess . Também é possível definir valores de configuração e, em particular, a configuração error_reporting também em .htaccess, com a mesma sintaxe descrita em 3. Ela afetará apenas o diretório no qual o .htaccess está localizado e todos os subdiretórios. Ele irá sobrescrever as configurações acima, neste caso não é necessário reiniciar o Apache.
-
Código-fonte . O último lugar onde esta configuração pode ser alterada é diretamente na fonte PHP executada. Se usado, irá substituir todas as configurações anteriores, e é exatamente isso que eu estava enfrentando. Pode ser definido chamando a função "error_reporting ()" ou com "ini_set (" error_reporting ",)". Os erros de compilação ainda podem ser exibidos, porque o script não será executado nesse caso.