Como faço para que os erros do PHP sejam exibidos?

verifiquei o meu ficheiro PHP ini e os erros de visualização estão definidos e também o relatório de erros é E_ALL. Reiniciei o meu servidor Apache.

Até pus estas linhas no topo do meu guião, e nem sequer apanha simples erros de análise. Por exemplo, declaro variáveis com um "$" e não Fecho declarações";". Mas todos os meus scripts mostram uma página em branco sobre estes erros, mas eu quero realmente ver os erros na saída do meu navegador.

error_reporting(E_ALL);
ini_set('display_errors', 1);
O que resta fazer?

Author: Peter Mortensen, 2009-06-27

24 answers

Isto funciona sempre para mim.
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

No entanto, isto não faz com que o PHP mostre erros de processamento - a única maneira de mostrar esses erros é modificar o seu php.ini com esta linha:

display_errors = on
 2633
Author: Fancy John, 2015-10-23 12:24:19

Você não consegue apanhar os erros de processamento ao activar a saída de erros no tempo de execução, porque processa o ficheiro Antes de executar de facto qualquer coisa (e dado que encontra um erro durante isto, não irá executar nada). Você vai precisar para mudar a real configuração do servidor para que display_errors está ligada e se a pretendida error_reporting nível é utilizado. Se não tiver acesso ao php.ini, talvez possas usar .htaccess ou similar, dependendo do servidor.

Esta questão forneça informações adicionais.

 133
Author: Michael Madsen, 2017-05-23 12:26:34

Dentro do teu php.ini:

display_errors = on

Depois reinicie o seu servidor web.

 121
Author: user1803477, 2013-01-08 09:48:33

Para mostrar todos os erros é necessário:

1. Ter estas linhas no script PHP que você está chamando a partir do navegador (normalmente index.php):

error_reporting(E_ALL);
ini_set('display_errors', '1');

2.(a) Certifique-se de que este script não tem erros de sintaxe

-ou-

2.b) Colocar display_errors = On no seu php.ini

Caso contrário, nem consegue correr as duas linhas!

Poderá verificar se existem erros de sintaxe no seu programa se Executar (no comando linha):

php -l index.php

Se você incluir o programa de outro programa PHP então ele irá mostrar os erros de sintaxe noincluído . Por exemplo:

index.php

error_reporting(E_ALL);
ini_set('display_errors', '1');

// Any syntax errors here will result in a blank screen in the browser

include 'my_script.php';

my_script.php

adjfkj // This syntax error will be displayed in the browser
 80
Author: andre, 2018-10-08 14:44:33

Alguns fornecedores de hospedagem web permitem-lhe alterar os parâmetros de PHP no .ficheiro htaccess .

Pode adicionar a seguinte linha:

php_value display_errors 1
Tinha o mesmo problema que o teu e esta solução resolveu-o.
 40
Author: Kalhua, 2015-08-08 16:39:53

Você pode encontrar todas as configurações para "relatórios de erros" ou "erros de visualização" não parecem funcionar no PHP 7. Isso porque o tratamento de erros mudou. Tente isto em vez disso:

try{
     // Your code
} 
catch(Error $e) {
    $trace = $e->getTrace();
    echo $e->getMessage().' in '.$e->getFile().' on line '.$e->getLine().' called from '.$trace[0]['file'].' on line '.$trace[0]['line'];
}

Ou, para apanhar excepções e erros de uma só vez (isto não é compatível com o PHP 5):

try{
     // Your code
} 
catch(Throwable $e) {
    $trace = $e->getTrace();
    echo $e->getMessage().' in '.$e->getFile().' on line '.$e->getLine().' called from '.$trace[0]['file'].' on line '.$trace[0]['line'];
}
 30
Author: Frank Forte, 2017-06-06 18:32:06
Isto vai funcionar.
<?php
     error_reporting(E_ALL);
     ini_set('display_errors', 1);    
?>
 26
Author: Mahendra Jella, 2016-12-27 15:20:51

Utilizar:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

Esta é a melhor maneira de O escrever, mas um erro de sintaxe dá uma saída em branco, por isso use a consola para verificar se há erros de sintaxe. A melhor maneira de depurar o código PHP é usar a consola; execute o seguinte:

php -l phpfilename.php
 25
Author: Abhijit Jagtap, 2016-12-27 15:27:08

Coloque isto no seu índice .php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
 16
Author: Sumit Gupta, 2017-10-26 02:57:55

Crie um ficheiro chamado php.ini na pasta onde reside o seu ficheiro PHP.

Dentro do php.ini adicione o seguinte código (estou dando um simples erro mostrando o código):

display_errors = on

display_startup_errors = on
 15
Author: NavyaKumar, 2016-12-27 15:21:52

Aqui está um script PHP:

<?php
    ini_set("display_startup_errors", 1);
    ini_set("display_errors", 1);

    /* Reports for either E_ERROR | E_WARNING | E_NOTICE  | Any Error*/
    error_reporting(E_ALL);

    echo(abc); /* Notice: abc is an undefined constant */
?>

Para uma explicação mais detalhada dos erros do PHP, visite erro do PHP-erro ao comunicar o erro().

 12
Author: B.Balamanigandan, 2016-12-27 15:24:06

Ao usar o PHP como um módulo Apache, podemos alterar a configuração usando diretivas em arquivos de configuração Apache (por exemplo, httpd.conf) and .ficheiros htaccess. Você precisará de "Opções AllowOverride "ou" AllowOverride All " privilégios para fazê-lo.

Vê isto

Http://funbird.co.uk/blog/tech-articals/linux-tech-articals/enabling-error-display-php-via-htaccess

 10
Author: mike, 2014-01-28 15:41:05

Se de alguma forma se encontrar numa situação em que não consegue modificar a configuração através de php.ini ou .htaccess, está com azar por mostrar erros quando os seus programas de PHP contêm erros de processamento. Você então teria que resolver para encontrar os arquivos na linha de comando assim:

find . -name '*.php' -type f -print0 | xargs -0 -n1 -P8 php -l | grep -v "No syntax errors"

Se a sua máquina está tão bloqueada que não permite alterar o valor via php.ini ou .htaccess, também pode impedir a alteração do valor via ini_set. Você pode verificar isso com o seguinte PHP script:

<?php
if( !ini_set( 'display_errors', 1 ) ) {
  echo "display_errors cannot be set.";
} else {
  echo "changing display_errors via script is possible.";
}
 9
Author: chiborg, 2016-01-11 12:11:27

Se, apesar de seguir todas as respostas acima (ou não pode editar o seu php.arquivo ini), você ainda não pode obter uma mensagem de erro, tente fazer um novo arquivo PHP que permite a comunicação de erros e, em seguida, incluir o arquivo problema. eg:

error_reporting(E_ALL);
ini_set('display_errors', 1);
require_once('problem_file.php');

Apesar de ter tudo configurado correctamente no meu ficheiro php.ini, esta era a única forma de eu apanhar um erro no espaço de nomes. O meu cenário EXACTO era:

//file1.php
namespace a\b;
class x {
    ...
}

//file2.php
namespace c\d;
use c\d\x; //Dies because it's not sure which 'x' class to use
class x {
    ...
}
 9
Author: jxmallett, 2018-07-18 02:48:38

À medida que estamos a correr o PHP7, as respostas dadas aqui já não estão correctas. O único que ainda está bem é o de Frank Forte, enquanto ele fala sobre PHP7. Por outro lado, ao invés de tentar pegar um erro com uma tentativa/captura, você pode usar um truque: use include. Aqui 3 peças de código:

Ficheiro: tst1.php

<?php
error_reporting(E_ALL);
ini_set('display_errors','On');
// Missing " and ;
echo "Testing
?>  
A execução disto no PHP7 não vai mostrar nada. Agora, tenta isto:

Ficheiro: tst2.php

<?php
error_reporting(E_ALL);
ini_set('display_errors','On');
include ("tst3.php");
?> 

Ficheiro: tst3.php

<?php
// Missing " and ;
echo "Testing
?>  

Agora execute o tst2 que define o o relatório de erros inclui então o tst3. Você verá:

erro de processamento: erro de sintaxe, fim inesperado do ficheiro, esperando variável (T_VARIÁVEL) ou ${ (T_DOLLAR_OPEN_CURLY_ chaves) ou {$ (T_CURLY_OPEN) no tst3.php on line 4

 8
Author: Peter, 2017-05-20 12:07:56

Você pode fazer algo como abaixo:

Defina abaixo os parâmetros no seu ficheiro de índice principal

    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);

Então, com base na sua exigência, pode escolher qual quer mostrar:

Para todos os erros, avisos e avisos

    error_reporting(E_ALL); OR error_reporting(-1);

Para Todos Os Erros

    error_reporting(E_ERROR);

Para Todas As Advertências

    error_reporting(E_WARNING);

Para Todos Os Avisos

    error_reporting(E_NOTICE);

Para mais informações verifique aqui

 8
Author: Binit Ghetiya, 2018-09-07 18:37:29

Eu normalmente iria com o seguinte código em meu projeto PHP simples, que são muito pequenos, se o projeto crescer, então eu vou recomendar.

if(!defined('ENVIRONMENT')){
    define('ENVIRONMENT','DEVELOPMENT');
}

$base_url   =   null;

if (defined('ENVIRONMENT'))
{
    switch (ENVIRONMENT)
    {
        case 'DEVELOPMENT':
            $base_url   =   'http://localhost/product/';
            ini_set('display_errors',1);
            ini_set('display_startup_errors',1);
            error_reporting(E_ALL|E_STRICT);
            break;

        case 'PRODUCTION':
            $base_url   =   'Prod url'; /* https://google.com */
            error_reporting(0);
            /* Mechanism to log errors */
            break;

        default:
            exit('The application environment is not set correctly.');
    }
}
Espero que isto ajude.
 7
Author: Channaveer Hakari, 2017-02-01 07:16:23

Poderá adicionar o seu próprio manipulador de erros personalizado, que poderá fornecer informações extra de depuração. Além disso, você pode configurá-lo para enviá-lo por e-mail.

function ERR_HANDLER($errno ,$errstr, $errfile, $errline){
    $msg="<b>Someting bad happened.</b> [$errno] $errstr <br><br>
    <b>File:</b> $errfile <br>
    <b>Line:</b> $errline <br>
    <pre>".json_encode(debug_backtrace(), JSON_PRETTY_PRINT)."</pre> <br>";

    echo $msg;

    return false;
}

function EXC_HANDLER($exception){
    ERR_HANDLER(0,$exception->getMessage(),$exception->getFile(),$exception->getLine());
}

function shutDownFunction() {
    $error = error_get_last();
    if ($error["type"] == 1) {
        ERR_HANDLER($error["type"],$error["message"],$error["file"],$error["line"]);
    }
}

set_error_handler ("ERR_HANDLER", E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);
register_shutdown_function("shutdownFunction");
set_exception_handler("EXC_HANDLER");
 5
Author: lintabá, 2017-06-04 14:41:28

A solução melhor / fácil / rápida que você pode usar se for uma depuração rápida, é cercar o seu código com exceções de captura. É o que estou a fazer quando quero verificar algo rapidamente na produção.

try {

//Page code

} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}
Espero que isto ajude.
 3
Author: Xakiru, 2017-03-27 02:31:01

Este código no topo deve funcionar error_ reporting (E_ALL);

No entanto, tente editar o código ao telefone no ficheiro

Error_ reporting =on

 2
Author: Wembo Mulumba, 2017-05-09 03:28:31

Escreve apenas:

error_reporting(-1);
 1
Author: jewelhuq, 2017-01-13 18:56:39
Foi o que aprendi. Em PHP.Ficheiro INI
error_reporting = E_ALL
display_errors = On
 1
Author: Salam, 2017-04-27 16:29:49
<?php
// Turn off error reporting
error_reporting(0);

// Report runtime errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// Report all errors
error_reporting(E_ALL);

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

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

>

Enquanto o teu site está ao vivo, o php.o ficheiro ini deverá ter os erros do 'display_ erros' desactivados por razões de segurança. No entanto, para o ambiente de desenvolvimento, o display_ erros pode ser ativado para resolução de problemas.

 1
Author: pardeep, 2018-05-24 08:48:07

Se tiver o xdebug instalado, poderá sobrepor todas as opções se definir:

xdebug.force_display_errors = 1;
xdebug.force_error_reporting = -1;

Force_ display_ erros

Tipo: int, valor por omissão: 0, introduzido no Xdebug > = 2, 3 Se isto a configuração é definida para 1 Então os erros serão sempre apresentados, não importa Qual é a configuração dos 'display_ erros' do PHP.

Forçar a notificação

Tipo: int, valor por omissão: 0, introduzido no Xdebug > = 2, 3 Esta configuração é uma máscara de bits, como o error_ reporting. Presente a máscara de bits será oleada logicamente com a máscara de bits representada pelo error_ relatando à dermina quais erros devem ser exibidos. Esta configuração só pode ser feita em php.ini e permite que você force certos erros de serem mostrados não importa o que uma aplicação faz com ini_set ().

 0
Author: Peter Haberkorn, 2017-10-19 05:45:41