Как я могу получить полезные сообщения об ошибках в PHP?

Во-первых, вы не используете JFrame правильно: вы не добавляете компоненты непосредственно в фрейм, вы добавляете их в JPanel, которые затем переходите к кадру с помощью setContentPane().

Также: не очень элегантно напрямую подкласс JFrame просто добавить компоненты. Вместо этого создайте свой кадр как отдельный объект.

545
задан ÐℛẲḰỮℒѦ 4 June 2019 в 09:45
поделиться

17 ответов

Для синтаксических ошибок вам необходимо включить отображение ошибок в php.ini. По умолчанию они отключены, потому что вы не хотите, чтобы «покупатель» видел сообщения об ошибках. Просмотрите эту страницу в документации PHP для получения информации о 2 директивах: error_reporting и display_errors . display_errors , вероятно, тот, который вы хотите изменить. Если вы не можете изменить php.ini, вы также можете добавить следующие строки в файл .htaccess:

php_flag  display_errors        on
php_value error_reporting       2039

Вы можете рассмотреть возможность использования значения E_ALL (как упомянуто Gumbo) для вашей версии PHP для error_reporting , чтобы получить все ошибки. подробнее

3 других элемента: (1) Вы можете проверить файл журнала ошибок, так как он будет содержать все ошибки (если ведение журнала не было отключено). (2) Добавление следующих 2 строк поможет вам отладить ошибки, которые не являются синтаксическими ошибками:

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

(3) Другой вариант - использовать редактор, который проверяет наличие ошибок при вводе, например PhpEd . PhpEd также поставляется с отладчиком, который может предоставить более подробную информацию. (Отладчик PhpEd очень похож на xdebug и интегрируется непосредственно в редактор, поэтому вы используете одну программу для всего.)

Ссылка Картмана также очень хороша: http: // www. ibm.com/developerworks/library/os-debug/[1210 impression

483
ответ дан 22 November 2019 в 22:11
поделиться

Чтобы включить полный отчет об ошибках, добавьте это в свой сценарий:

error_reporting(E_ALL);

Это вызывает отображение даже минимальных предупреждений. И, на всякий случай:

ini_set('display_errors', '1');

Заставит отображение ошибок. Это должно быть отключено на производственных серверах, но не при разработке.

5
ответ дан 22 November 2019 в 22:11
поделиться

Вы можете зарегистрировать свой собственный обработчик ошибок в PHP. Например, выгрузка всех ошибок в файл может помочь вам в этих непонятных случаях. Обратите внимание, что ваша функция будет вызываться независимо от того, какой у вас текущий error_reporting . Очень простой пример:

57
ответ дан 22 November 2019 в 22:11
поделиться

Существует действительно полезное расширение под названием « xdebug », которое также сделает ваши отчеты намного лучше.

30
ответ дан 22 November 2019 в 22:11
поделиться
error_reporting(E_ALL | E_STRICT);

И включить отображение ошибок в php.ini

10
ответ дан 22 November 2019 в 22:11
поделиться

FirePHP также может быть полезным.

6
ответ дан 22 November 2019 в 22:11
поделиться

Вы можете включить полный отчет об ошибках (включая уведомления и строгие сообщения). Некоторым это кажется слишком многословным, но попробовать стоит. Установите error_reporting на E_ALL | E_STRICT в вашем php.ini.

error_reporting = E_ALL | E_STRICT

E_STRICT уведомит вас об устаревших функциях и даст рекомендации о лучших методах выполнения определенных задач.

Если вам не нужны уведомления, но вы считаете полезными другие типы сообщений, попробуйте исключить уведомления:

error_reporting = (E_ALL | E_STRICT) & ~E_NOTICE

Также убедитесь, что display_errors включен в php.ini. Если ваша версия PHP старше 5.2.4, установите для нее значение На :

display_errors = "On"

Если ваша версия 5.2.4 или новее, используйте:

display_errors = "stderr"
4
ответ дан 22 November 2019 в 22:11
поделиться

Помимо error_reporting и ini-параметра display_errors, вы можете получать ошибки SYNTAX из файлов журнала вашего веб-сервера. Когда я разрабатываю PHP, я загружаю журналы веб-сервера моей системы разработки в свой редактор. Каждый раз, когда я тестирую страницу и получаю пустой экран, файл журнала устаревает, и мой редактор спрашивает, хочу ли я его перезагрузить. Когда я это делаю, я перехожу вниз и обнаруживаю синтаксическую ошибку. Например:

[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
ответ дан 22 November 2019 в 22:11
поделиться

You can register your own error handler in PHP. Dumping all errors to a file might help you in these obscure cases, for example. Note that your function will get called, no matter what your current error_reporting is set to. Very basic example:

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
ответ дан 22 November 2019 в 22:11
поделиться

Ошибки и предупреждения обычно появляются в .... \ logs \ php_error.log или .... \ logs \ apache_error.log в зависимости от в настройках php.ini.

Также полезные ошибки часто направляются в браузер, но, поскольку они не являются допустимым html, они не отображаются.

Итак "tail -f " ваши файлы журналов а когда вы получаете пустой экран, используйте пункты меню IE "просмотр" -> "источник" для просмотра необработанного вывода.

60
ответ дан 22 November 2019 в 22:11
поделиться

Dunno if it will help, but here is a piece of my standard config file for php projects. I tend not to depend too much on the apache configs even on my own server.

I never have the disappearing error problem, so perhaps something here will give you an idea.

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
ответ дан 22 November 2019 в 22:11
поделиться

Я всегда использую этот синтаксис в самом начале php-скрипта.

ini_set('error_reporting', E_ALL);
ini_set('display_errors', 'On');  //On or Off
30
ответ дан 22 November 2019 в 22:11
поделиться

использование @inexistent_function_call (); в вашем коде заставит интерпретатор незаметно умереть и прервет синтаксический анализ скрипта. Вам следует проверить наличие недопустимых функций и постараться не использовать оператор подавления ошибок (@ char)

1
ответ дан 22 November 2019 в 22:11
поделиться

Если ошибка связана с кодом PHP, вы можете использовать функцию error_reporting () в своем коде, чтобы настроить отчет для всех.

Однако это не обрабатывает ситуацию, когда PHP дает сбой. Информация об этом доступна только в журналах сервера. Возможно, у вас нет доступа к ним, но у многих хостинг-провайдеров, с которыми я работал, есть способ предоставить вам доступ к ним. Например, мне больше всего нравится подход, когда он создает файл error_log в текущем каталоге, где находится .php. Попробуйте поискать там или свяжитесь с вашим хостинг-провайдером по этому поводу.

Попробуйте поискать там или свяжитесь с вашим хостинг-провайдером по этому поводу.

Попробуйте поискать там или свяжитесь с вашим хостинг-провайдером по этому поводу.

-1
ответ дан 22 November 2019 в 22:11
поделиться

Попробуйте установить уровень сообщения об ошибках в ваших реальных файлах php. Или, как предлагали другие, проверьте настройки своего сервера - это может быть что-то в php.ini или какое-то ограничение в отношении вашего хоста. Не полагайтесь только на .htaccess. Кроме того, при устранении неполадок, print_r любые переменные, которые могут показаться подозрительными.

2
ответ дан 22 November 2019 в 22:11
поделиться

Некоторые приложения обрабатывают эти инструкции сами, вызывая что-то вроде этого:

error_reporting(E_ALL & ~E_DEPRECATED); or error_reporting(0);

И, таким образом, переопределяя ваши настройки .htaccess.

1
ответ дан 22 November 2019 в 22:11
поделиться

Вы уверены, что PHP действительно подбирает параметр « display_errors » из .htaccess? Чтобы убедиться в этом, проверьте вывод функции phpinfo () .

Кроме того, убедитесь, что вы не использовали ' @ », это могло быть ваши ошибки, если вы использовали '@include ...' или '@some_function (...)' где-нибудь вверху трассировки стека.

2
ответ дан 22 November 2019 в 22:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: