Отчет об ошибках в приложении CodeIgniter

Более короткое объяснение:

Я понял, что опубликовал это как действительно многословное объяснение - я оставил предыдущее объяснение ниже, но добавил более короткое резюме.

В моем приложении CodeIgniter уровень сообщения об ошибках установлен на 0. Если я пытаюсь сослаться на неопределенный индекс (например) в контроллере или представлении, не выводится ошибка, которая является ожидаемой.

Однако у меня есть библиотека, которая загружается в сторонний класс (NuSoap).

Если класс NuSoap обнаружит ошибку - он все равно выдаст ошибку в моем приложении.

Ошибки также будут выводиться, если ошибка обнаружена в самом файле библиотеки.

Почему это? Если он загружается через CodeIgniter, через библиотеку он должен наследовать уровень сообщений об ошибках?


Предыдущее (многословное) объяснение:

У меня возникли проблемы с пониманием того, как отчеты об ошибках работают в моем приложении CodeIgniter.

В index.php мои сообщения об ошибках настроены следующим образом:

if (defined('ENVIRONMENT'))
{
    switch (ENVIRONMENT)
    {
        case 'development':
            error_reporting(E_ALL);
        break;

        case 'testing':
        case 'production':
            error_reporting(0);
        break;

        default:
            exit('The application environment is not set correctly.');
    }
}

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

Это заняло некоторое время, но я сделал несколько открытий.

Причина, по которой я понял это во время тестирования. Моя цель состояла в том, чтобы отследить любые ошибки при подключении к используемому нами API, к которому мы подключаемся с помощью клиента NuSoap.

Когда я изменил имя пользователя / пароль, чтобы сделать их намеренно неправильными, я обнаружил, что уведомления PHP выводятся из класса NuSoap - однако мой уровень сообщений об ошибках установлен на 0.

Ошибка в уведомлении PHP (неопределенный индекс)

У меня есть библиотека, которая включала основной класс NuSoap:

<?php

if(!defined('BASEPATH')) {
    exit('No direct script access allowed');
}

class NuSoap {

    var $nusoap_client;

    public function __construct() {
        /* Load the NuSoap class */
        require_once('../httpdocs/application/libraries/nusoap/nusoap.php');
        /* Initialise the NuSoap client */
        $this->nusoap_client = new nusoap_client(NUSOAP_WSDL_FILE, 'wsdl', '', '', '', '', 120, 120);
        /* Set the credentials */
        $this->nusoap_client->set_credentials(USERNAME, PASSWORD);
        $this->nusoap_client = $this->nusoap_client->getProxy();
    }

}

?>

И ошибка исходит из включенного файла /application/libraries/nusoap/nusoap.php

В отдельном контроллере, который не использует библиотеку NuSoap, я поместил следующий код в функцию index:

$arr = array(); $arr['exists'] = true;
echo 'deliberate error - ' . $arr['not_exists'];
die(phpinfo());

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

Также - в выводе PHP Info для меня не имеет смысла следующее:

Directive       Local Value Master Value
display_errors  On          On

Если display_errors включен - почему они здесь не выводятся?

Для подавления ошибок, генерируемых в nusoap.phpЯ обнаружил, что выкладывать error_reporting(0) в верхней части файла сделаем это. Я не могу понять, почему конфигурация отчетов об ошибках в CodeIgniter не влияет на этот файл, даже если он загружен библиотекой CodeIgniter?

1 ответ

Решение

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

Библиотека, вызывающая проблему, была PHPGrid, которая настраивала display_errors до 1.

Другие вопросы по тегам