Jak Mogę uzyskać przydatne komunikaty o błędach w PHP?

Dość często będę próbował uruchomić skrypt PHP i po prostu dostać pusty ekran z powrotem. Brak Komunikatu o błędzie; tylko pusty ekran. Przyczyną mógł być prosty błąd składni (niewłaściwy nawias, brak średnika), nieudane wywołanie funkcji lub coś zupełnie innego.

Bardzo trudno jest ustalić, co poszło nie tak. Kończę na komentowaniu kodu, wpisywaniu wszędzie poleceń "echo" itp. próbuję zawęzić problem. Ale na pewno musi być lepszy sposób, prawda?

Czy istnieje sposób, aby PHP generowało użyteczny komunikat o błędzie, tak jak robi to Java?

Author: TylerH, 2009-05-10

30 answers

W przypadku błędów składniowych, musisz włączyć wyświetlanie błędów w php.ini. Domyślnie są one wyłączone, ponieważ nie chcesz, aby "Klient" widział komunikaty o błędach. Sprawdź tę stronę w dokumentacji PHP, aby uzyskać informacje na temat 2 dyrektyw: error_reporting i display_errors. display_errors to prawdopodobnie ten, który chcesz zmienić. Jeśli nie możesz zmodyfikować php.ini, możesz również dodać następujące wiersze do an .plik htaccess:

php_flag  display_errors        on
php_value error_reporting       2039

Możesz rozważyć użycie wartości E_ALL (jak wspomniano przez Gumbo) dla twojej wersji PHP dla error_reporting, aby uzyskać wszystkie błędy. więcej informacji

3 inne pozycje: (1) możesz sprawdzić plik dziennika błędów, ponieważ będzie zawierał wszystkie błędy(chyba że logowanie zostało wyłączone). (2) dodanie następujących 2 linii pomoże Ci debugować błędy, które nie są błędami składni:

error_reporting(-1);
ini_set('display_errors', 'On');

(3) inną opcją jest użycie edytora, który sprawdza błędy podczas pisania, np. PhpEd . PhpEd jest również wyposażony w debugger, który może zapewnić bardziej szczegółowe informacje. (Debugger PhpEd jest bardzo podobny do Xdebug i integruje się bezpośrednio z edytorem, więc do wszystkiego używasz 1 programu.)

Link jest również bardzo dobry: http://www.ibm.com/developerworks/library/os-debug/

 511
Author: Darryl Hein,
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-10 12:27:57

Poniższe włącza wszystkie błędy:

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

Zobacz także następujące linki

 460
Author: Eljakim,
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-05-09 22:25:08

Poniższy kod powinien wyświetlać wszystkie błędy:

<?php

// ----------------------------------------------------------------------------------------------------
// - Display Errors
// ----------------------------------------------------------------------------------------------------
ini_set('display_errors', 'On');
ini_set('html_errors', 0);

// ----------------------------------------------------------------------------------------------------
// - Error Reporting
// ----------------------------------------------------------------------------------------------------
error_reporting(-1);

// ----------------------------------------------------------------------------------------------------
// - Shutdown Handler
// ----------------------------------------------------------------------------------------------------
function ShutdownHandler()
{
    if(@is_array($error = @error_get_last()))
    {
        return(@call_user_func_array('ErrorHandler', $error));
    };

    return(TRUE);
};

register_shutdown_function('ShutdownHandler');

// ----------------------------------------------------------------------------------------------------
// - Error Handler
// ----------------------------------------------------------------------------------------------------
function ErrorHandler($type, $message, $file, $line)
{
    $_ERRORS = Array(
        0x0001 => 'E_ERROR',
        0x0002 => 'E_WARNING',
        0x0004 => 'E_PARSE',
        0x0008 => 'E_NOTICE',
        0x0010 => 'E_CORE_ERROR',
        0x0020 => 'E_CORE_WARNING',
        0x0040 => 'E_COMPILE_ERROR',
        0x0080 => 'E_COMPILE_WARNING',
        0x0100 => 'E_USER_ERROR',
        0x0200 => 'E_USER_WARNING',
        0x0400 => 'E_USER_NOTICE',
        0x0800 => 'E_STRICT',
        0x1000 => 'E_RECOVERABLE_ERROR',
        0x2000 => 'E_DEPRECATED',
        0x4000 => 'E_USER_DEPRECATED'
    );

    if(!@is_string($name = @array_search($type, @array_flip($_ERRORS))))
    {
        $name = 'E_UNKNOWN';
    };

    return(print(@sprintf("%s Error in file \xBB%s\xAB at line %d: %s\n", $name, @basename($file), $line, $message)));
};

$old_error_handler = set_error_handler("ErrorHandler");

// other php code

?>

Jedynym sposobem na wygenerowanie pustej strony z tym kodem jest błąd w programie obsługi zamykania. Skopiowałem i wkleiłem to z własnego cms bez testowania go, ale jestem pewien, że działa.

 176
Author: m4dm4x1337,
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-08-13 11:59:35

W pliku, który chcesz debugować, możesz umieścić następujące linie:

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

To nadpisuje domyślne ustawienia w php.ini, które po prostu sprawiają, że PHP zgłasza błędy do dziennika.

 61
Author: Tomalak,
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
2009-05-10 09:54:31

Błędy i ostrzeżenia zwykle pojawiają się w ....\logs\php_error.log LUB ....\logs\apache_error.log w zależności od Twojego php.ustawienia ini.

Również przydatne błędy są często kierowane do przeglądarki, ale ponieważ nie są poprawnym html, nie są wyświetlane.

Więc "tail -f "Twoje pliki dziennika i kiedy pojawi się pusty ekran użyj IEs "widok" - > "źródło" opcje menu, aby wyświetlić surowe wyjście.

 61
Author: James Anderson,
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-22 08:19:30

Konfiguracja PHP

2 wpisy w php.ini dyktuje wyjście błędów:

  1. display_errors
  2. error_reporting

W produkcji, display_errors jest zwykle ustawiony na Off (co jest dobrą rzeczą, ponieważ wyświetlanie błędów w zakładach produkcyjnych nie jest ogólnie pożądane!).

Jednakże, w rozwoju , powinno być ustawione na On, aby błędy były wyświetlane. Sprawdź !

error_reporting (PHP 5.3) jest domyślnie ustawione na E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED (co oznacza, że wszystko jest wyświetlane z wyjątkiem powiadomień, ścisłych standardów i powiadomień o wycofaniu). W razie wątpliwości ustaw ją na E_ALL, aby wyświetlić Wszystkie błędy. Sprawdź !

Whoa whoa! Bez czeku! Nie mogę zmienić mojego php.ini!

Szkoda. Zazwyczaj współdzielone hosty nie pozwalają na zmianę ich php.plik ini, a więc ta opcja jest niestety niedostępna. Ale nie bój się! Mamy inne opcje !

Konfiguracja Runtime

W pożądanym skrypcie możemy zmienić php.wpisy ini w runtime! Oznacza to, że będzie działać, gdy skrypt działa! Super!

error_reporting(E_ALL);
ini_set("display_errors", "On");

Te dwie linie zrobią taki sam efekt jak zmiana php.wpisy ini jak wyżej! Super!

I still get a blank page / 500 error!

To znaczy, że skrypt nawet nie zadziałał! To zwykle dzieje się, gdy masz błąd składni!

Z błędami składni, skrypt nawet nie dostaje się do środowiska wykonawczego. Nie powiedzie się w czasie kompilacji , co oznacza, że użyje wartości w php.ini, które, jeśli nie zmieniłeś, może nie zezwalać na wyświetlanie błędów.

Dzienniki błędów

Dodatkowo PHP domyślnie rejestruje błędy. W hostingu współdzielonym może znajdować się w dedykowanym folderze lub w tym samym folderze co skrypt naruszający.

Jeśli masz dostęp do php.ini, znajdziesz go pod error_log wejście.

 55
Author: Madara's Ghost,
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
2019-05-17 11:33:13

Zawsze używam tej składni na samej górze skryptu php.

ini_set('error_reporting', E_ALL);
ini_set('display_errors', 'On');  //On or Off
 31
Author: FDisk,
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
2009-09-25 07:48:09

Istnieje naprawdę przydatne rozszerzenie o nazwie " xdebug ", które uczyni Twoje raporty znacznie milszymi.

 30
Author: gnarf,
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
2009-05-10 09:59:30

Dla szybkiego, praktycznego rozwiązywania problemów Zwykle sugeruję tutaj tak:

error_reporting(~0); ini_set('display_errors', 1);

Należy umieścić na początku skryptu, który jest w trakcie rozwiązywania problemów. To nie jest idealne, idealnym wariantem jest to, że możesz również włączyć to w php.ini i że logujesz błędy w PHP, aby złapać błędy składni i uruchamiania.

Ustawienia opisane tutaj wyświetlają wszystkie błędy, powiadomienia i ostrzeżenia, w tym ścisłe, niezależnie od wersji PHP.

Następne rzeczy do consider:

  • zainstaluj Xdebug i włącz zdalne debugowanie za pomocą swojego IDE.

Zobacz też:

 27
Author: hakre,
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-24 15:18:06

Możliwe jest zarejestrowanie Hooka, aby ostatni błąd lub ostrzeżenie były widoczne.

function shutdown(){
  var_dump(error_get_last());
}

register_shutdown_function('shutdown');

Dodanie tego kodu do początku indeksu.php pomoże Ci debugować problemy.

 27
Author: Eduardo Oliveira,
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-05 18:59:52

Jeśli jesteś super cool, możesz spróbować:

$test_server = $_SERVER['SERVER_NAME'] == "127.0.0.1" || $_SERVER['SERVER_NAME'] == "localhost" || substr($_SERVER['SERVER_NAME'],0,3) == "192";

ini_set('display_errors',$test_server);
error_reporting(E_ALL|E_STRICT);

Wyświetli błędy tylko wtedy, gdy jesteś uruchomiony lokalnie. Daje również zmienną test_server do użycia w innych miejscach, gdzie jest to właściwe.

Wszelkie błędy, które wystąpią przed uruchomieniem skryptu, nie zostaną wychwycone, ale dla 99% błędów, które popełniam, nie jest to problemem.

 17
Author: Rich Bradshaw,
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
2011-07-04 19:49:30

Na górze strony wybierz parametr

error_reporting(E_ERROR | E_WARNING | E_PARSE);
 17
Author: Kld,
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-05-06 14:14:25

Jest to problem z konfiguracją loaded vs. runtime]}

Ważne jest, aby rozpoznać, że błąd składni lub błąd parsowania występuje podczas kompilacji lub parsowania , co oznacza, że PHP zrezygnuje, zanim jeszcze będzie miało szansę wykonać jakikolwiek kod. Jeśli więc modyfikujesz konfigurację PHP display_errors podczas wykonywania, (dotyczy to wszystkiego, od użycia ini_set w kodzie do użycia .htaccess, który jest plikiem konfiguracyjnym runtime) wtedy tylko domyślne załadowane ustawienia konfiguracji są w grze.

Jak zawsze unikać WSOD w rozwoju

Aby uniknąć WSOD należy upewnić się, że Twój załadowany plik konfiguracyjny mA display_errors włączone i error_reporting ustawione na -1 (jest to odpowiednik e_all, ponieważ zapewnia, że wszystkie bity są włączone niezależnie od wersji PHP). Nie koduj na twardo stałej wartości E_ALL, ponieważ ta wartość może ulec zmianie między różnymi wersjami PHP.

Załadowana konfiguracja to albo załadowany plik php.ini, albo Plik apache.conf lub httpd.conf lub plik virtualhost. Pliki te są odczytywane tylko raz na etapie uruchamiania (na przykład przy pierwszym uruchomieniu apache httpd lub php-fpm) i zastępowane tylko przez zmiany konfiguracji środowiska uruchomieniowego. Upewnienie się, że display_errors = 1 i error_reporting = -1 w załadowanym pliku konfiguracyjnym gwarantuje, że nigdy nie zobaczysz WSOD niezależnie od błędu składni lub analizy, który wystąpi przed zmianą środowiska uruchomieniowego, taką jak ini_set('display_errors', 1); lub error_reporting(E_ALL); może mieć miejsce.

How to find your (php.ini) załadowane pliki konfiguracyjne

Aby zlokalizować załadowane pliki konfiguracyjne, utwórz nowy plik PHP z następującym kodem...

<?php
phpinfo();

Następnie wskaż tam swoją przeglądarkę i spójrz na załadowany plik konfiguracyjny i dodatkowo .pliki ini przetwarzane , które zazwyczaj znajdują się na górze phpinfo() i zawierają ścieżkę bezwzględną do wszystkich załadowanych plików konfiguracyjnych.

Jeśli widzisz (none) zamiast pliku, oznacza to, że nie masz php.ini w pliku konfiguracyjnym (php.ini) ścieżka . Więc możesz pobrać stock php.ini w pakiecie z PHP stąd i skopiuj go do ścieżki pliku konfiguracyjnego jako php.następnie upewnij się, że twój użytkownik php ma wystarczające uprawnienia do odczytu z tego pliku. Musisz ponownie uruchomić httpd lub php-fpm, aby go załadować. Pamiętaj, to jest rozwój php.plik ini dostarczany wraz ze źródłem PHP. Więc proszę nie używać go w produkcja!


Po prostu nie rób tego w produkcji

To naprawdę najlepszy sposób, aby uniknąć WSOD w rozwoju. Każdy, kto sugeruje, że umieścić ini_set('display_errors', 1); lub error_reporting(E_ALL); na górze skryptu PHP lub za pomocą .htaccess jak tutaj, nie pomoże Ci uniknąć WSOD, gdy wystąpi błąd składni lub analizy (jak w Twoim przypadku tutaj), jeśli załadowany plik konfiguracyjny ma display_errors wyłączony.

Wiele osób (i składowe instalacje PHP) będzie używać pliku production-ini to ma domyślnie wyłączone display_errors, co zwykle powoduje tę samą frustrację, której doświadczyłeś tutaj. Ponieważ PHP ma już wyłączone, gdy się uruchamia, następnie napotka błąd składni lub analizy i nie ma nic do wyjścia. Spodziewasz się, że twój ini_set('display_errors',1); u góry skryptu PHP powinien tego uniknąć, ale nie ma znaczenia, czy PHP nie będzie w stanie przetworzyć Twojego kodu, ponieważ nigdy nie osiągnie środowiska uruchomieniowego.

 17
Author: Sherif,
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
2020-06-20 09:12:55

Aby utrzymać to i uczynić go confortale, możesz edytować swoje php.plik ini. Zazwyczaj jest on przechowywany w /etc/php.ini lub /etc/php/php.ini, ale bardziej lokalne php.ini mogą go zastąpić, w zależności od wytycznych dostawcy hostingu. Sprawdź phpinfo() Plik Loaded Configuration File u góry, aby upewnić się, który z nich zostanie załadowany jako ostatni.

Wyszukaj display_errors w tym pliku. Powinny być tylko 3 przypadki, z których 2 są komentowane.

Zmień nieakcentowany wiersz na:

display_errors = stdout
 16
Author: Ram,
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-07-16 07:46:55
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
 16
Author: Abuzer Firdousi,
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-12-04 20:54:29

Nie wiem, czy to pomoże, ale oto fragment mojego standardowego pliku konfiguracyjnego dla projektów php. Zazwyczaj nie polegam zbytnio na konfiguracjach apache nawet na własnym serwerze.

Nigdy nie mam problemu z znikającym błędem, więc może coś tutaj da ci pomysł.

Edited to show APPLICATON_LIVE

/*
APPLICATION_LIVE will be used in process to tell if we are in a development or production environment.  It's generally set as early as possible (often the first code to run), before any config, url routing, etc.
*/

if ( preg_match( "%^(www.)?livedomain.com$%", $_SERVER["HTTP_HOST"]) ) {
    define('APPLICATION_LIVE', true);
} elseif ( preg_match( "%^(www.)?devdomain.net$%", $_SERVER["HTTP_HOST"]) ) {
    define('APPLICATION_LIVE', false);
} else {
    die("INVALID HOST REQUEST (".$_SERVER["HTTP_HOST"].")");
    // Log or take other appropriate action.
}


/*
--------------------------------------------------------------------
DEFAULT ERROR HANDLING
--------------------------------------------------------------------
Default error logging.  Some of these may be changed later based on APPLICATION_LIVE.
*/
error_reporting(E_ALL & ~E_STRICT);
ini_set ( "display_errors", "0");
ini_set ( "display_startup_errors", "0");
ini_set ( "log_errors", 1);
ini_set ( "log_errors_max_len", 0);
ini_set ( "error_log", APPLICATION_ROOT."logs/php_error_log.txt");
ini_set ( "display_errors", "0");
ini_set ( "display_startup_errors", "0");

if ( ! APPLICATION_LIVE ) {
    // A few changes to error handling for development.
    // We will want errors to be visible during development.
    ini_set ( "display_errors", "1");
    ini_set ( "display_startup_errors", "1");
    ini_set ( "html_errors", "1");
    ini_set ( "docref_root", "http://www.php.net/");
    ini_set ( "error_prepend_string", "<div style='color:red; font-family:verdana; border:1px solid red; padding:5px;'>");
    ini_set ( "error_append_string", "</div>");
}
 16
Author: Eli,
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-01-17 22:02:52
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);
ini_set('html_errors', 1);

Ponadto możesz uzyskać bardziej szczegółowe informacje za pomocą xdebug .

 15
Author: Yan.Zero,
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-05-09 22:26:07

Polecam Nette dla lepszej wizualizacji błędów i wyjątków w PHP:

Nette Tracy zrzut ekranu

 15
Author: Ondřej Šotek,
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-05-09 23:41:16
error_reporting(E_ALL | E_STRICT);

I włączyć wyświetlanie błędów w php.ini

 10
Author: Ólafur Waage,
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
2009-05-10 09:54:53

Możesz zarejestrować własną obsługę błędów w PHP. Wrzucenie wszystkich błędów do pliku może pomóc na przykład w tych niejasnych przypadkach. Zauważ, że twoja funkcja zostanie wywołana, bez względu na to, na jaką wartość jest ustawiona bieżąca wartość error_reporting. Bardzo podstawowy przykład:

function dump_error_to_file($errno, $errstr) {
    file_put_contents('/tmp/php-errors', date('Y-m-d H:i:s - ') . $errstr, FILE_APPEND);
}
set_error_handler('dump_error_to_file');
 9
Author: soulmerge,
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
2009-05-10 09:54:10

Dwie kluczowe linie, których potrzebujesz, aby uzyskać przydatne błędy z PHP to:

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

Jak zauważyli inni współpracownicy, są one domyślnie wyłączone ze względów bezpieczeństwa. Przydatna wskazówka - podczas konfigurowania witryny warto wykonać przełącznik dla różnych środowisk, aby błędy te były domyślnie włączone w środowiskach lokalnych i deweloperskich. Można to osiągnąć za pomocą następującego kodu (najlepiej w indeksie.php lub pliku konfiguracyjnego, więc jest on aktywny z początek): {]}

switch($_SERVER['SERVER_NAME'])
{
    // local
    case 'yourdomain.dev':
    // dev
    case 'dev.yourdomain.com':
        ini_set('display_errors',1);
        error_reporting(E_ALL);
    break;
    //live
    case 'yourdomain.com':
        //...
    break;
}
 7
Author: Code Synthesis,
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-03-24 14:57:42

FirePHP może być również przydatny.

 6
Author: Rich Bradshaw,
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
2009-05-10 10:21:42

Otwórz swoje php.ini, upewnij się, że jest ustawione na:

display_errors = On

Uruchom ponownie serwer.

 6
Author: user577803,
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
2011-11-24 20:18:15

Możesz również wypróbować PHPStorm jako edytor kodu. Znajdzie wiele błędów PHP i innych składni zaraz po wpisaniu w edytorze.

 6
Author: user1681048,
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-06-18 01:03:15

Jeśli jesteś użytkownikiem ubuntu to idź do swojego terminala i uruchom to polecenie

sudo tail -50f /var/log/apache2/error.log

Gdzie wyświetli ostatnie 50 błędów. W związku z tym, że nie jesteśmy w stanie sprostać wymaganiom naszych klientów, nie jesteśmy w stanie sprostać ich wymaganiom.

 6
Author: Ashutosh Jha,
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-11-10 11:43:08

Aby włączyć pełne raportowanie błędów, dodaj to do skryptu:

error_reporting(E_ALL);
To powoduje, że pojawiają się nawet minimalne Ostrzeżenia. Na wszelki wypadek:
ini_set('display_errors', '1');

Wymusi wyświetlanie błędów. Powinno to być wyłączone na serwerach produkcyjnych, ale nie podczas tworzenia.

 5
Author: Daniel Sorichetti,
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
2009-05-10 12:09:01

"błędy" są najbardziej przydatnymi rzeczami dla programistów, którzy znają swoje błędy i rozwiązali je, aby system działał idealnie.

PHP zapewnia kilka lepszych sposobów na poznanie deweloperów, dlaczego i gdzie ich kawałek kodu dostaje błędy, więc znając te błędy programiści mogą uczynić swój kod lepszym na wiele sposobów.

Najlepsze sposoby pisania dwóch wierszy na górze skryptu, aby uzyskać wszystkie komunikaty o błędach:

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

Inny sposób użycia narzędzi debuggera jak xdebug {[9] } w Twoim IDE.

 5
Author: Janyk,
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-05-09 22:45:11

Możesz włączyć pełne raportowanie błędów(w tym powiadomienia i ścisłe wiadomości). Niektórzy uważają to za zbyt gadatliwe, ale warto spróbować. Ustaw error_reporting na E_ALL | E_STRICT w php.ini.

error_reporting = E_ALL | E_STRICT

E_STRICT powiadomi Cię o przestarzałych funkcjach i poda zalecenia dotyczące najlepszych metod wykonywania określonych zadań.

Jeśli nie chcesz, aby powiadomienia, ale inne typy wiadomości były pomocne, spróbuj wyłączyć powiadomienia:

error_reporting = (E_ALL | E_STRICT) & ~E_NOTICE

Upewnij się również, że {[7] } jest włączone w php.ini. Jeśli Wersja PHP jest starsza niż 5.2.4, ustaw ją na On:

display_errors = "On"

Jeśli Twoja wersja to 5.2.4 lub nowsza, użyj:

display_errors = "stderr"
 4
Author: Ayman Hourieh,
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
2009-05-10 10:04:56

Oprócz error_reporting i ustawienia ini display_errors, możesz uzyskać Błędy składniowe z plików dziennika serwera www. Kiedy rozwijam PHP Ładuję log serwera mojego systemu programistycznego do mojego edytora. Za każdym razem, gdy testuję stronę i dostaję pusty ekran, plik dziennika staje się przestarzały, a mój edytor pyta, czy chcę go ponownie załadować. Kiedy to robię, przeskakuję na dół i jest błąd składni. Na przykład:

[Sun Apr 19 19:09:11 2009] [error] [client 127.0.0.1] PHP Parse error:  syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in D:\\webroot\\test\\test.php on line 9
 4
Author: jmucchiello,
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
2009-05-10 18:16:21

Dla tych, którzy używają nginx i mają biały ekran nawet dla pliku z <?php echo 123;. W moim przypadku nie miałem tej wymaganej opcji dla PHP w pliku konfiguracyjnym nginx:

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

Tej opcji nie było w pliku fastcgi_params, więc PHP nie działało i nie było żadnych błędów w logach.

 3
Author: AVKurov,
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-07-05 09:10:11