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.
"$"
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?
24 answers
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
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.
Dentro do teu php.ini:
display_errors = on
Depois reinicie o seu servidor web.
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
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
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.
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'];
}
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
?>
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
Coloque isto no seu índice .php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
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
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().
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
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.";
}
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 {
...
}
À 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
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
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.
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");
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.
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
Escreve apenas:
error_reporting(-1);
error_reporting = E_ALL
display_errors = On
<?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.
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 ().