Como desativo os avisos do PHP?

126
Notice: Constant DIR_FS_CATALOG already defined

Eu já comentado display_errorsno php.ini, mas não está funcionando.

Como faço para que o PHP não produza essas coisas para os navegadores?

ATUALIZAR

Coloquei display_errors = Offlá, mas ainda está relatando esses avisos,

Isso é um problema com o PHP 5.3?

Relatando inúmeras pilhas de chamadas também ..

user198729
fonte
3
Se você estiver usando o Apache, talvez seja necessário reiniciar o servidor! Se você estiver usando o XAMPP, selecione "reiniciar" no aplicativo gerenciador.
St4wik
2
Sugiro que corra grep display_errors /path/to/php.inipara ver se sua linha está sendo substituída em algum lugar no arquivo. Isto é o que estava acontecendo comigo.
usandfriends
Error_reporting é a solução
David Stienen
tente ini_set('display_errors',0)no seu arquivo php. Quando as configurações iniciais não estiverem funcionando, verifique se phpinfo()mostra o valor desejado. Se não você ou mudou o ini-arquivo errado ou algo substitui os valores de php.ini
Radon8472
não é um bug do php 5.3. display_errors obras de php 4.0.3 até as versões mais recentes @see 3v4l.org/87gIl
Radon8472

Respostas:

78

Você pode definir display_errorsa 0ou usar a error_reporting()função.

No entanto, os avisos são irritantes (eu posso simpatizar parcialmente ), mas eles servem a um propósito. Você não deve definir uma constante duas vezes, a segunda vez não funcionará e a constante permanecerá inalterada!

Pekka
fonte
4
+1: aprovo mencionar que ele deve corrigir os erros, não desativar os relatórios. E você fez isso de uma forma mais suave do que @ Jonathan Kuhn :-)
Josh
1
Não, parece que este é um bug do php5.3, display_errorsnão funciona como esperado.
User198729
@user tente a phpinfo()para ver se a configuração realmente se aplica. Perdoe-me, mas eu fortemente dúvida de que você tenha encontrado um bug no PHP 5.3 - Só vou acreditar quando vê-lo :)
Pekka
Estranho, o local valueé On, mas o master valueestá desligado, não sei o que isso significa exatamente ...
user198729
1
@user Eu acho que o valor local pode vir de ini_setdiretivas ou php_ini_flagconfigurações nos .htaccessarquivos.
Pekka
242

Na documentação do PHP ( error_reporting ):

<?php
// Turn off all error reporting
error_reporting(0);
?>

Outras opções interessantes para essa função:

<?php

// Report simple running errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings ...)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

// Report all errors except E_NOTICE
// This is the default value set in php.ini
error_reporting(E_ALL & ~E_NOTICE);
// For PHP < 5.3 use: E_ALL ^ E_NOTICE

// Report all PHP errors (see changelog)
error_reporting(E_ALL);

// Report all PHP errors
error_reporting(-1);

// Same as error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);

?>
Cristian
fonte
Muito prestativo e dá a resposta para a pergunta. Embora eu saiba que é melhor corrigir todos os avisos também. Às vezes, pode ser útil exibir tudo, menos avisos.
precisa saber é o seguinte
3
Desativar apenas os avisos não funcionou para mim usando ^ AVISO, conforme indicado na postagem acima. Para o PHP v5.3 use: E_ALL & ~ E_NOTICE
Chizzle
Se você tiver uma API REST retornando JSON ou XML ou qualquer outra coisa, pode desativá-los. Ou pelo menos convertê-los em exceções e manipulá-los de acordo.
TheRealChx101 10/10
Olá. Trabalhou para mim. Muito obrigado.
H. Farid
Display_errors controla se os erros são enviados para stdoutput. Mas quando você altera error_reporting para 0, desativa totalmente todos os itens de manipulação e registro de erros. NUNCA deve executar error_reporting (0).
Radon8472
30

Para a linha de comando php, defina

error_reporting = E_ALL & ~E_NOTICE

no /etc/php5/cli/php.ini

A phpexecução do comando omite os avisos.

Paul Salber
fonte
Ao fazer isso error_reporting = E_ALL & ~ E_NOTICE & ~ E_WARNING no php.ini. Desativa o aviso do PHP e os avisos do PHP. De modo que nenhum aviso php e php avisos são vistos em todos os navegadores
Deepak Lamichhane
Isso vale para as configurações de php do console. Se você estiver usando o php para gerar páginas da Web sobre o arquivo de configuração do servidor web apache2, é /etc/php5/apache2/php.ini É melhor usar o phpinfo () para ver qual arquivo de configuração é realmente usado.
MilanG 4/16/16
23
<?php

// Turn off all error reporting
error_reporting(0);

// Report simple running errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings ...)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

// Report all errors except E_NOTICE
error_reporting(E_ALL & ~E_NOTICE);

// Report all PHP errors (see changelog)
error_reporting(E_ALL);

// Report all PHP errors
error_reporting(-1);

// Same as error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);

?>

source http://php.net/manual/en/function.error-reporting.php

Abhishek Goel
fonte
2
Isso não é apenas uma duplicata desta resposta existente postada anos atrás?
Pang
Nós dois copiamos colados da documentação php e as duas respostas mencionaram os recursos.
Abhishek Goel
Os unicórnios @AbhishekGoel são pôneis disfarçados, essa afirmação é irrelevante, você ainda duplicou a resposta já existente quatro anos depois.
Ricky Boyce
@ RickyB Não verifiquei a resposta existente e nem copiei.
Abhishek Goel 27/03
12

Utilizou esta linha no seu código

error_reporting(E_ALL ^ E_NOTICE);  

Eu acho que isso está cheio de você.

maick vicky
fonte
6

Você está procurando:

php -d error_reporting="E_ERROR | E_WARNING | E_PARSE"
Christian Tismer
fonte
2
Olá @ Christian, e bem-vindo ao StackOverflow! No futuro, seria ótimo se você pudesse adicionar uma pequena explicação / detalhe extra à sua resposta para esclarecer aqueles que a veem a respeito de por que / como a solução funciona / corrige o problema. Muito obrigado, e feliz codificação :)
Zachary Kniebel
1
exatamente! Eu uso /usr/bin/php -d error_reporting="E_ERROR | E_WARNING | E_PARSE" -f /path/to/file.phppara o meu crontab
vladkras
4

Prefiro não definir o error_reportinginterior do meu código. Mas, em um caso, um produto herdado, existem tantos avisos que devem ser ocultados.

Então, usei o seguinte trecho para definir o valor configurado no servidor, error_reportingmas subtrair os E_NOTICEs.

error_reporting(error_reporting() & ~E_NOTICE);

Agora, a configuração do relatório de erros pode ser configurada em php.iniou .htaccess. Somente avisos sempre serão desativados.

algorítmico
fonte
3

Você pode definir ini_set('display_errors',0);em seu script ou definir com quais erros deseja exibir error_reporting().

jeroen
fonte
Eu precisava usar o ini_setmétodo mencionado aqui, o error_reporting(0)método mencionado em outros lugares não teve nenhum efeito.
pix
3

por não causar os erros:

defined('DIR_FS_CATALOG') || define('DIR_FS_CATALOG', 'whatever');

Se você realmente precisar, altere o relatório de erros usando error_reporting () para E_ALL ^ ​​E_NOTICE.

Jonathan Kuhn
fonte
1
Se for um site de produção, independentemente de você achar que está livre de erros, você ainda não deve exibir erros se eles surgirem - então 'ao não causar os erros' parece uma resposta um pouco atrevida a uma pergunta válida.
Cam
5
desde quando é permitido permitir erros em um site de produção? Concordo que em um site de produção você não deve exibir erros, não era isso que eu estava dizendo. Eu estava dizendo que você deve verificar se a constante está definida e configurá-la se não (e foi por isso que dei o exemplo de código).
Jonathan Kuhn
Embora sua resposta não tenha sido a "mais agradável", parece responder ao máximo a pergunta do OP. Marque com +1 a sua resposta e / gostaria que ela estivesse marcada como resposta, pois é a resposta correta.
Nazca
@ Nazca Sim, desde então, mudei meu comportamento e tente ser muito mais amigável. :)
Jonathan Kuhn
2

Para código PHP:

<?php
error_reporting(E_ALL & ~E_NOTICE);

Para php.iniconfiguração:

error_reporting = E_ALL & ~E_NOTICE
Nabi KAZ
fonte
1

Eu descobri esse truque recentemente. Whack um @ no início de uma linha que pode produzir um aviso / erro.

Como que por mágica, eles desaparecem.

DrLazer
fonte
21
isso geralmente é uma péssima idéia, é como colocar tampões nos ouvidos porque seu carro está fazendo um barulho horrível.
David Morrow
10
Na verdade, isso faz todo o sentido para algumas instâncias, por exemplo, ao renderizar uma variável, independentemente de ela estar definida ou vazia.
22413 Frans
1
Isso só faz sentido quando você tem algo como um plugin do WordPress que o autor ainda não atualizou e você sabe exatamente o que está causando o problema. É um curativo, não uma correção.
Imperativo
Eu gosto tanto do error_reporting () quanto do '@'. Eu não estava ciente de nenhum deles. Obrigado. Eu gosto do '@', pois fornece a mesma funcionalidade de error_reporting (0) e é mais fácil de digitar. Se o problema é mais como "o cabide segurando o escapamento" do que o "horrível ruído de trituração", ele permite que o projeto avance. Eu posso facilmente encontrar e corrigir isso quando houver tempo. Isso ajudou com um problema em que o erro é causado pela leitura de dados de um arquivo, portanto, não há erros de digitação ou problemas de biblioteca.
Mark Longmire
1
Apenas certifique-se de colocar @ onde você tem 100% de certeza do que está fazendo.
Nick
1

Use phpinfo () e pesquise para Configuration File (php.ini) Pathver qual caminho do arquivo de configuração para o php é usado. O PHP pode ter vários arquivos de configuração, dependendo do ambiente em que está sendo executado. Normalmente, para console, é:

/etc/php5/cli/php.ini

e para o php executado pelo apache é:

/etc/php5/apache2/php.ini

E, em seguida, defina error_reportingo que você precisa:

http://www.phpknowhow.com/configuration/php-ini-error-settings/ http://www.zootemplate.com/news-updates/how-to-disable-notice-and-warning-in-phpini- Arquivo

MilanG
fonte
1

Conforme mencionado por alguns e se você é o autor do código, corrija todos esses erros, avisos etc., pois isso causará mais problemas a longo prazo do que não corrigi-los (principalmente quando você atualizar o sistema operacional). Para o seu servidor, você deve exibir erros apenas nos seus logs, não na tela do cliente.

Portanto, para evitar os erros no seu navegador, use a display_errorsbandeira como você já encontrou:

display_errors = Off

Agora, o verdadeiro problema é quando você está executando o código de outra pessoa. Nesse caso, a modificação do código provavelmente será substituída sempre que você atualizar esse código. Torna entediante manter esse código.

No meu caso, estou executando o PHP crontabpara que o wp-cron.phpscript seja executado de vez em quando. Eu estava recebendo erros nos meus emails, o que se torna tedioso quando você recebe um email a cada 10 minutos! Nesse caso, porém, o sistema Wordpress possui um arquivo de configuração que inclui WP_DEBUGae eles chamam a error_reporting()função, portanto, tentar alterar a error_reportingvariável na linha de comando não funcionará. Em vez disso, você deve editar o wp-config.phparquivo na pasta raiz e verificar se WP_DEBUGestá definido como false. Caso contrário, você receberá todos esses avisos e avisos o tempo todo.

Alexis Wilke
fonte
0

Você pode verificar se a constante já está definida usando:

<?php
if (!defined('MYCONST'))
    define('MYCONST', 'Weeha!');
?>
Thiago Belem
fonte
0

Eu acredito que comentar os display_errors no php.ini não funcionará porque o padrão é On. Você deve defini-lo como 'Desligado'.

Não se esqueça de reiniciar o Apache para aplicar alterações na configuração.

Observe também que, embora você possa definir display_errors em tempo de execução, alterá-lo aqui não afeta os erros FATAL.

Conforme observado por outras pessoas, idealmente durante o desenvolvimento, você deve executar com error_reporting no nível mais alto possível e display_errors ativado. Embora sejam irritantes quando você começa, esses erros, avisos, avisos e conselhos rigorosos de codificação são adicionados e permitem que você se torne um codificador melhor.

AllenJB
fonte
0

Constantes duplas definidas

Para corrigir o erro específico aqui, você pode verificar se uma constante já está definida antes de defini-la:

if ( ! defined( 'DIR_FS_CATALOG' ) ) 
  define( 'DIR_FS_CATALOG', 'something...' );

Eu pessoalmente começaria com uma pesquisa na constante da base de código e DIR_FS_CATALOG, em seguida, substituiria a dupla definição por esta.

Ocultando avisos do PHP em linha, caso a caso

O PHP fornece o @operador de controle de erros, que você pode usar para ignorar funções específicas que causam avisos ou avisos.

Usando isso, você pode ignorar / desativar avisos e avisos caso a caso em seu código, o que pode ser útil para situações em que um erro ou aviso é intencional, planejado ou simplesmente irritante e impossível de resolver na fonte . Coloque um @antes da função ou var que está causando um aviso e ele será ignorado.

Aqui está um exemplo:

// Intentional file error
$missing_file = @file( 'non_existent_file' );

Mais sobre isso pode ser encontrado nos documentos de operadores de controle de erros do PHP .

Kevin Leary
fonte