display_errors = off в php.ini по-прежнему отображает ошибки для отображения - и как регистрировать ошибки? - PullRequest
1 голос
/ 30 июня 2019

Когда я добавляю «display_errors = off» в мой файл php.ini, у меня все равно отображаются некоторые ошибки php.

ПЕРЕД добавлением display_errors = off в мой файл php.ini Я получал полные пути и т. Д., Отображал (много информации. Не предназначено для просмотра пользователем). ПОСЛЕ помещения display_errors = off в мой файл php.ini, я получаю гораздо меньше информации об ошибках. отображается, однако я по-прежнему получаю следующую ошибку: «Извините, произошла ошибка: доступ пользователя« username »@« localhost »к базе данных« mydatabase »запрещен.« Извините, произошла ошибка »- мой пользовательский текст connect_error die , и это все, что я хотел бы отобразить. Но рендеринг имени пользователя и базы данных я бы хотел избежать. Есть ли что-то еще, что мне нужно добавить в мой файл php.ini, или это может быть функция использования connect_error и умереть в моем php-коде? Мой хост-сайт LAMP не разрешает мне доступ к .htaccess и некоторым другим файлам конфигурации. Но у меня есть собственный файл php.ini, который я могу редактировать.

Как только у меня будет работать display_error так, как я хочу, я хотел бы добавить log_errors & error_log в мой файл php.ini, чтобы я мог регистрировать ошибки php для отладки.

Вот моя строка в php.ini:

display_errors = off

Вот мой код проверки соединения в моих файлах php (если это поможет):

if ($con->connect_error) {
die("Sorry, there was an error: " . $con->connect_error);
}

Я ожидал, что display_errors = off в моем php.ini даст мне пустой экран во время выполнения или только для отображения «Извините, произошла ошибка», что будет моим предпочтением. Любые комментарии предложения приветствуются. Спасибо.

ОБНОВЛЕНИЕ: После прочтения комментариев, которые я получил к своему оригинальному сообщению, я попытался изменить некоторый код и добавить некоторый код.

Я добавил следующую строку кода непосредственно перед установлением соединения mysql db, чтобы в моем журнале ошибок php сообщалось об ошибках mysql:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

Затем я добавил следующие строки в свой php.ini, чтобы все ошибки не отображались, а записывались в журнал ошибок php:

error_reporting = E_ALL
display_errors = off
log_errors = on
error_log = ../logs/my_php_error_log

Я полностью закомментировал свой код "$ con> connect_error" (ниже), поскольку все ошибки mysql / php теперь все равно записываются в файл, который я часто проверяю. ПРИМЕЧАНИЕ. Если проверка соединения НЕ является неэффективной практикой, сообщите мне:

/*
if ($con->connect_error) {
die("Sorry, there was an error.");
}
*/

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

Ответы [ 2 ]

0 голосов
/ 30 июня 2019

Если вы не хотите, чтобы имя пользователя и база данных отображались, вам просто нужно удалить $con->connect_error из вашего настраиваемого сообщения.

if ($con->connect_error) {
    die("Sorry, there was an error.");
}
0 голосов
/ 30 июня 2019

Логика вашего кода требует, чтобы он отображал сообщение об ошибке независимо от настроек ini. Никогда не рекомендуется умирать в своем коде с сообщением об ошибке. PHP имеет очень хорошие функции отчетов об ошибках и логики, и вам не нужно умирать или отображать их самостоятельно.

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

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

Не отлавливать свои ошибки и не отображать их самостоятельно.Если конфигурация переключена на display_errors=On и также включена отчетность об ошибках, вы увидите ошибки в браузере.

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

if ($con->connect_error) {
    throw new \Exception("Sorry, there was an error: " . $con->connect_error);
}

Вы также можете использовать trigger_errorвызвать ошибку PHP вручную.

if ($con->connect_error) {
    throw new \Exception("Sorry, there was an error: " . $con->connect_error, E_USER_ERROR);
}

Худший вариант из всех - die.Если вам необходимо die, то вы можете проверить, включен ли дисплей ошибок первым.

if ($con->connect_error) {
    if(ini_get('display_errors')){
        die("Sorry, there was an error: " . $con->connect_error);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...