Como faço para silenciar erros de PHP?

32

Existe uma maneira de silenciar todos os erros, avisos e avisos do PHP no Drupal? Eles são úteis no site de desenvolvimento, mas são um grande risco de segurança e tornam o site ruim ao vivo.

Sei que no Drupal 6 a página em admin / settings / reporting-error pode impedir o Drupal de gravar erros na tela, mas onde posso encontrar isso no Drupal 7? Parece que está faltando.

drupal_stuff_alter
fonte
3
Observe, porém, que os erros têm um papel muito importante: indicam que algo está errado. Surpreendendo isso, não resolve o problema subjacente. Isso também é chamado de "Método Russo": quando a luz do alarme de uma usina nuclear começar a piscar, basta remover a lâmpada. A luz do alarme não pisca mais; sem problemas.
berkes
Engraçado :). Mas eu apenas suprimo o erro no site de produção.
Drupal_stuff_alter 14/11
Drupal tem a opção de decidir quais erros devem ser exibidos; os erros não exibidos ainda são registrados no banco de dados e mostrados em admin / reports / dblog.
kiamlaluno
@kiamlaluno, em produção que é um pouco boa (ainda assim, apresentar um erro de falha no pagamento é sempre melhor do que deixar o cliente em incerteza). Mas, no desenvolvimento e teste, minha experiência é que os erros inseridos no dblog são negligenciados. Drupalsites com centenas de avisos e avisos por hora registrados lá, não é exceção. E exceções e erros reais são perdidos no barulho. O melhor é empurrar cada aviso duro para o rosto do desenvolvedor.
Berkes
Certo, mas o OP parece estar interessado em esconder esses erros em um site de produção. (Veja: "Eles são úteis no site devel mas eles são um grande risco à segurança, e fazer o site ruim olhar no ao vivo.")
kiamlaluno

Respostas:

29

O caminho muda, como no Drupal 7, a mesma página que você veria anteriormente em admin / settings / error-reporting agora está em admin / config / development / logging.

captura de tela

kiamlaluno
fonte
1
Por alguma razão, não sou capaz de fazer isso. Ao clicar em salvar, minha seleção está sendo redefinida. Existe uma maneira que eu possa mudar isso manualmente no banco de dados ou algo assim?
Niranjan N Raju
17

Conforme sugerido, em Administration » Configuration » Development(at /admin/config/development/logging) você pode encontrar a configuração para desativar a exibição de mensagens de erro, mas ela não desativará completamente os erros / avisos.

É porque o Drupal 7 impõe E_ALL, então eles ainda são gravados no syslog e você pode vê-los nos logs recentes que afetam o desempenho do site.

Para desativar completamente os avisos, você precisará adicionar a seguinte linha no seu arquivo settings.phpou php.ini:

ini_set('error_reporting', E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);

Mostrar todos os erros, exceto avisos e avisos de padrões de codificação.

Para silenciar todos os erros de PHP, o que não é recomendado, você pode tentar adicionar seu arquivo de configurações:

error_reporting(0); // Disable all errors.

Vejo: error_reporting()


Código principal do Drupal 7 responsável pelo E_ALLregistro (arquivo includes/bootstrap.inc:):

// Enforce E_ALL, but allow users to set levels not part of E_ALL.
error_reporting(E_ALL | error_reporting());

Veja também:

kenorb
fonte
4

Uma coisa que ninguém mencionou que pode ser útil para as pessoas saberem é que o Drupal 7 ignora todos os níveis de relatórios de erros do sistema local. Portanto, você não pode usar .htaccess ou mesmo php.ini para definir os níveis de relatórios de erros de php no Drupal.

Há um patch proposto para isso no D8, mas atualmente no D7 você está restrito às três máscaras de erro - todas, nenhuma ou erros e avisos - definidas na página de administração indicada por kiamlaluno.

floresta
fonte
3

As configurações estão sempre em admin / config / development / log :)

Remon
fonte
Muito obrigado! Ainda quero receber as notificações verdes ativas. Espero que eles não desapareçam.
drupal_stuff_alter
2

Não sei por que o método Drush é tão indocumentado, mas eu tenho no meu script de construção:

drush vset error_level 0

... que salva as mensagens de erro no log, mas não as exibe na tela.

Matt Fletcher
fonte
1

Pode ser necessário adicionar aspas à solução kenorb postada acima:

ini_set('error_reporting', 'E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR');
Greg Lund-Chaix
fonte
Isso está errado - essas são constantes, não devem ser citadas. error_reporting é um valor inteiro composto pelas constantes inteiras ORed juntas. Não é uma configuração de string composta por nomes constantes, como você tem aqui.
Datashaman 15/03/16
0

Existe um módulo para isso:

https://www.drupal.org/project/errorlevelpermission

Na página do projeto:

Então você pode

  • tenha uma função de construtor de sites (ou mesmo uma função especial de depurador) veja erros e avisos
  • outros não veem erros e avisos.
geek-merlin
fonte