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?
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
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.
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.
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
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.
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'];
}
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);
?>
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
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);
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
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().
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
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.";
}
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 {
...
}
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
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
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.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");
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.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
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);
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
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.
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 ().
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