Слишком много информации, ошибка PHP? - PullRequest
3 голосов
/ 05 декабря 2011

Я создаю пользовательскую оболочку для функций mysql_, когда MySQLi, например недоступен, и когда он не может подключиться, он генерирует исключение. Однако фатальная ошибка выводится так:

Неустранимая ошибка: Неопределенное исключение "Исключение" с сообщением "Не удалось подключиться к базе данных. в C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\MiniTicket\database.php: 16

Трассировка стека:

# 0 C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\MiniTicket\database.php (49): MySQL->__construct('localhost', 'miniticket', 'mtu:r!Nj@~qR6f9...')
# 1 C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\MiniTicket\index.php (3): require_once('C:\Program File...')
# 2 {main} добавляется в C: \ Program Файлы (x86) \ Программное обеспечение Apache Foundation \ Apache2.2 \ htdocs \ MiniTicket \ database.php on line 16

Как видите, пароль моей базы данных четко отображается для всех. Нехорошо. Я не хочу отключать эти сообщения, особенно в процессе разработки, но я также не хочу показывать конфиденциальную информацию. Использование set_error_handler также не является хорошим решением, потому что я должен все проанализировать, и это может привести к ошибке.

Итак ... есть ли простой способ отключить отображение параметров в функции внутри сообщения об ошибке, желательно через PHP, а не в каком-либо файле конфигурации?

Редактировать: Отключение пути к файлу, кроме имени файла, также будет бонусом.

Ответы [ 2 ]

1 голос
/ 05 декабря 2011

Отредактируйте свой php.ini и установите

display_errors = 0

Если у вас нет доступа к php.ini, то в начале вашего скрипта (ов) вам нужно добавить:

ini_set("display_errors", "0");

См. http://php.net/manual/en/errorfunc.configuration.php и http://php.net/manual/en/function.error-reporting.php

Это остановит все ошибки от вывода в браузер , и, вероятно, должно выполняться только в вашей производственной системе. Убедитесь, что вы все еще регистрируете ошибки (через настройку php.ini).

Я не уверен, почему это не конфигурация по умолчанию, чтобы такая ситуация не возникала в производственных средах.

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

Обратите внимание, что вам может потребоваться перезапустить Apache, чтобы изменения в php.ini вступили в силу.

1 голос
/ 05 декабря 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...