Отключение регистрации ошибок в CodeIgniter для определенного помощника/библиотеки

Я использую класс mPDF для создания PDF-файлов из HTML.

В то время как PDF-файлы отображаются точно так, как должны, мой журнал ошибок CodeIgniter заполнен уведомлениями об ошибках, которые, похоже, связаны с какой-то ошибкой в ​​mPDF.

Поскольку эти уведомления безвредны, а PDF-файлы получаются отлично, все, что я хотел бы, это отключить ведение журнала ошибок CodeIgniter, когда я запускаю этот класс.

Но я не нашел способ сделать это.

Вот мой код:

КОНТРОЛЛЕР

$this->load->helper('mpdf');
mpdf($html, $filename);

ПОМОЩНИК (mpdf_helper.php)

function mpdf($html, $filename) 
{
    $CI =& get_instance();
    $CI->config->set_item('log_threshold', 0);
    include('mpdf/mpdf.php');

    $mpdf=new mPDF('', 'letter');
    $mpdf->SetHTMLHeader('powered by example.com');
    $mpdf->WriteHTML($html, 0);
    $mpdf->Output($filename, 'I');
}

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

К вашему сведению, у моего index.php есть

define('ENVIRONMENT', 'production');

который устанавливает error_reporting(0).

Знаете ли вы, что я должен сделать, чтобы CodeIgniter не регистрировал ошибки только при запуске mPDF?

ПРИМЕРЫ ОШИБОК

ERROR - 2012-08-04 23:03:59 --> Severity: Notice  --> Undefined index: direction /var/www/vhosts/asd.com/httpdocs/application/helpers/mpdf/mpdf.php 21103

ERROR - 2012-08-04 23:06:07 --> Severity: Notice  --> Undefined index: MARGIN-TOP /var/www/vhosts/asd.com/httpdocs/application/helpers/mpdf/mpdf.php 17271

person pepe    schedule 05.08.2012    source источник
comment
Можете ли вы опубликовать ошибки, которые вы получаете? Вы не можете изменить error_reporting только для одной области — это общесистемная функция.   -  person Laurence    schedule 05.08.2012
comment
обычно это undefined index ошибки, которые не влияют на вывод PDF - я добавил пример в OP - есть идеи, как я могу выборочно подавить ошибки?   -  person pepe    schedule 05.08.2012


Ответы (1)


Это связано с тем, что протоколирование ошибок codeigniter связано с set_error_handler, и php обработчик огня независимо от значения error_reporting. Как говорится в руководстве по php:

... однако вы все еще можете прочитать текущее значение error_reporting и действовать соответствующим образом.

Обработчик ошибок CI по умолчанию не делает этого для регистрации (но делает для отображения ошибок), L102" rel="nofollow">просто регистрирует все, что приходит, если внутренний уровень ошибок CI требует ведения журнала. (значение конфигурации log_threshold 1, см. функцию вызывается обработчиком ошибок php.)

Если вы хотите, чтобы регистратор CI учитывал уровень регистрации ошибок, вы можете расширить класс CI_Exception с помощью стандартный метод вроде этого:

class MY_Exceptions extends CI_Exceptions {
    function log_exception($severity, $message, $filepath, $line) {
        $current_reporting = error_reporting();
        $should_report = $current_reporting & $serverity;

        if ($shoud_report) {
            // call the original implementation if we should report the error
            parent::log_exception($severity, $message, $filepath, $line);
        }
    }
}

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

person complex857    schedule 05.08.2012
comment
это выглядит как отличное решение - как я могу использовать эту функцию (т.е. где именно я должен вызывать ее в моем OP-коде)? - person pepe; 05.08.2012
comment
Способ расширения основных библиотек заключается в создании файла с соответствующим именем с вашим классом в разделе application/libraries или application/core см. часть расширения основного класса в документация. В вашем случае скопируйте код класса MY_Exceptions в файл application/core/MY_Exceptions.php, и CI автоматически подберет его (обратите внимание на символы верхнего и нижнего регистра). - person complex857; 05.08.2012