Jak wyświetlić błędy PHP?

Sprawdziłem mój plik PHP ini i ustawiono błędy wyświetlania, a także zgłaszanie błędów to E_ALL. Zrestartowałem serwer WWW Apache.

Umieściłem nawet te linie na górze mojego skryptu i nawet nie wychwytuje prostych błędów parsowania. Na przykład deklaruję zmienne za pomocą "$" i nie zamykam poleceń ";". Ale wszystkie moje Skrypty pokazują pustą stronę O tych błędach, ale chcę zobaczyć błędy w wyjściu przeglądarki.

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

Co pozostało do zrobienia?

Author: Peter Mortensen, 2009-06-27

24 answers

To zawsze działa dla mnie:

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

To jednak nie sprawia, że PHP wyświetla błędy parsowania - jedynym sposobem, aby pokazać te błędy, jest zmodyfikowanie php.ini z tą linią:

display_errors = on
 2633
Author: Fancy John,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-23 12:24:19

Nie możesz wychwycić błędów podczas włączania wyjścia błędu w czasie wykonywania, ponieważ parsuje plik przed rzeczywistym wykonaniem czegokolwiek (a ponieważ napotka błąd podczas tego, nie wykona niczego). Musisz zmienić rzeczywistą konfigurację serwera, aby display_errors był włączony i używany jest odpowiedni poziom error_reporting. Jeśli nie masz dostępu do php.ini, możesz użyć .htaccess lub podobne, w zależności od serwera.

To pytanie może dostarczyć dodatkowe informacje.

 133
Author: Michael Madsen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:34

Wewnątrz twojego php.ini :

display_errors = on

Następnie uruchom ponownie serwer WWW.

 121
Author: user1803477,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-08 09:48:33

Aby wyświetlić wszystkie błędy musisz:

1. Mieć te linie w skrypcie PHP, który wywołujesz z przeglądarki (zazwyczaj index.php):

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

2.(a) Upewnij się, że skrypt nie zawiera błędów składniowych

-or -

2.B) ustawić display_errors = On w swoim php.ini

W Przeciwnym Razie, to nie może nawet uruchomić te 2 linie!

Możesz sprawdzić Błędy składniowe w swoim skrypcie, uruchamiając (w wierszu poleceń):

php -l index.php

Jeśli dołącz skrypt z innego skryptu PHP, a następnie wyświetli błędy składniowe w skrypcie dołączonym . Na przykład:

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,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-08 14:44:33

Niektórzy dostawcy hostingu pozwalają na zmianę param PHP w .plik htaccess .

Możesz dodać następujący wiersz:

php_value display_errors 1

Miałem ten sam problem co twój i to rozwiązanie go naprawiło.

 40
Author: Kalhua,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-08 16:39:53

Może się okazać, że wszystkie ustawienia "raportowania błędów "lub" wyświetlania błędów " nie działają w PHP 7. Dzieje się tak dlatego, że obsługa błędów uległa zmianie. Spróbuj zamiast tego:

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'];
}

Lub, aby wyłapać wyjątki i błędy za jednym zamachem (nie jest to wstecznie kompatybilne z 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,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-06 18:32:06

To zadziała:

<?php
     error_reporting(E_ALL);
     ini_set('display_errors', 1);    
?>
 26
Author: Mahendra Jella,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-27 15:20:51

Użycie:

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

Jest to najlepszy sposób, aby to napisać, ale błąd składni daje puste wyjście, więc Użyj konsoli, aby sprawdzić błędy składni. Najlepszym sposobem na debugowanie kodu PHP jest użycie konsoli; Uruchom następujące:

php -l phpfilename.php
 25
Author: Abhijit Jagtap,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-27 15:27:08

Ustaw to w indeksie .php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
 16
Author: Sumit Gupta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-26 02:57:55

Utwórz plik o nazwie php.ini w folderze, w którym znajduje się Twój plik PHP.

Wewnątrz php.ini Dodaj następujący kod (podaję prosty błąd pokazujący kod):

display_errors = on

display_startup_errors = on
 15
Author: NavyaKumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-27 15:21:52

Oto skrypt 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 */
?>

Aby uzyskać bardziej szczegółowe wyjaśnienie błędów PHP, odwiedź Błąd PHP-error_reporting().

 12
Author: B.Balamanigandan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-27 15:24:06

Używając PHP jako modułu Apache, możemy zmienić ustawienia konfiguracyjne używając dyrektyw w plikach konfiguracyjnych Apache (np. httpd.conf) oraz .pliki htaccess. Do tego potrzebne będą uprawnienia "AllowOverride Options" lub "AllowOverride All".

Sprawdź to

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

 10
Author: mike,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-28 15:41:05

Jeśli w jakiś sposób znajdziesz się w sytuacji, w której nie możesz zmodyfikować ustawienia za pomocą php.ini lub .htaccess, masz pecha do wyświetlania błędów, gdy twoje skrypty PHP zawierają błędy parse. Następnie będziesz musiał rozwiązać linkowanie plików w linii poleceń w następujący sposób:

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

Jeśli twój host jest tak zablokowany, że nie pozwala na zmianę wartości przez php.ini lub .htaccess, może również uniemożliwić zmianę wartości przez ini_set. Możesz to sprawdzić za pomocą następującego PHP skrypt:

<?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,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-11 12:11:27

Jeśli pomimo przestrzegania wszystkich powyższych odpowiedzi (lub nie możesz edytować swojego php.plik ini), nadal nie możesz uzyskać Komunikatu o błędzie, spróbuj utworzyć nowy plik PHP, który umożliwia raportowanie błędów, a następnie dołącz plik problemu. eg:

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

Pomimo poprawnego ustawienia wszystkiego w moim pliku php.ini, był to jedyny sposób, w jaki mogłem złapać błąd przestrzeni nazw. Mój dokładny scenariusz brzmiał:

//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,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-18 02:48:38

Ponieważ obecnie uruchamiamy PHP7, odpowiedzi podane tutaj nie są już poprawne. Jedynym nadal OK jest ten od Franka Forte, jak mówi o PHP7. Z drugiej strony, zamiast próbować złapać błąd za pomocą try/catch, możesz użyć sztuczki: użyj include. Tutaj 3 kawałki kodu:

Plik: tst1.php

<?php
error_reporting(E_ALL);
ini_set('display_errors','On');
// Missing " and ;
echo "Testing
?>  

Uruchomienie tego w PHP7 nic nie pokaże

A teraz spróbuj tego:

Plik: tst2.php

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

Plik: tst3.php

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

Teraz uruchom tst2, który ustawia raportowanie błędów następnie dołącz tst3. Zobaczysz:

błąd analizy: błąd składni, nieoczekiwany koniec pliku, oczekiwanie zmiennej (T_VARIABLE) lub $ {(t_dollar_open_curly_braces) lub {$(t_curly_open) w tst3.php on line 4

 8
Author: Peter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-20 12:07:56

Możesz zrobić coś takiego jak poniżej:

Ustaw poniżej parametry w głównym pliku indeksu

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

Następnie na podstawie Twoich wymagań możesz wybrać, który chcesz pokazać:

Dla wszystkich błędów, ostrzeżeń i powiadomień

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

Dla Wszystkich Błędów

    error_reporting(E_ERROR);

Dla Wszystkich Ostrzeżeń

    error_reporting(E_WARNING);

Dla Wszystkich Ogłoszeń

    error_reporting(E_NOTICE);

Aby uzyskać więcej informacji sprawdź tutaj

 8
Author: Binit Ghetiya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-07 18:37:29

W moim prostym projekcie php zwykle używam następującego kodu, który jest bardzo mały, jeśli projekt będzie duży, to polecam.

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.');
    }
}
Mam nadzieję, że to pomoże.
 7
Author: Channaveer Hakari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-01 07:16:23

Możesz dodać własny program obsługi błędów, który może dostarczyć dodatkowych informacji o debugowaniu. Ponadto można skonfigurować go do wysyłania za pośrednictwem poczty 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á,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-04 14:41:28

Najlepszym / łatwym / szybkim rozwiązaniem, którego możesz użyć, jeśli jest to szybkie debugowanie, jest otaczanie kodu wyjątkami. To właśnie robię, gdy chcę szybko sprawdzić coś na produkcji.

try {

//Page code

} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}
Mam nadzieję, że to pomoże.
 3
Author: Xakiru,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-27 02:31:01

Ten kod na górze powinien działać error_reporting (E_ALL);

Jednak spróbuj edytować kod na telefonie w pliku

Error_reporting = on

 2
Author: Wembo Mulumba,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-09 03:28:31

Po prostu napisz:

error_reporting(-1);
 1
Author: jewelhuq,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-13 18:56:39

Tego się nauczyłem. W PHP.Plik INI

error_reporting = E_ALL
display_errors = On
 1
Author: Salam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
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);
?

>

Gdy twoja strona jest na żywo, php.plik ini powinien mieć wyłączony display_errors ze względów bezpieczeństwa. Jednak w środowisku programistycznym można włączyć display_errors do rozwiązywania problemów.

 1
Author: pardeep,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-24 08:48:07

Jeśli masz zainstalowany xdebug, możesz nadpisać wszystkie ustawienia przez ustawienie:

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

Force_display_errors

Type: int, Default value: 0, Introduced in Xdebug >= 2.3 If this ustawienie jest ustawione na 1 wtedy błędy będą zawsze wyświetlane, bez względu na jakie jest ustawienie PHP display_errors.

Force_error_reporting

Typ: int, Wartość domyślna: 0, wprowadzona w Xdebug >= 2.3 To ustawienie jest maską bitową, jak error_reporting. Ta maska bitowa będzie logicznie lub z maską bitową reprezentowaną przez error_reporting do dermine, które błędy mają być wyświetlane. To ustawienie może być wykonane tylko w php.ini i pozwala wymusić wyświetlanie pewnych błędów bez względu na to, co aplikacja zrobi z ini_set ().

 0
Author: Peter Haberkorn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-19 05:45:41