Ну, теперь, когда я немного углубился в это, я понимаю, что это глупый вопрос и неправильный. Оказывается, что автор устаревшего кода, который я поддерживал, приветствовал журнал ошибок в другом файле с помощью инструкции php_init
. Hi-jacking произошел одновременно с буферизацией вывода, что заставило его выглядеть так, как будто выходная буферизация отбрасывала мои сообщения об ошибках.
Итак, г-н Модератор, не стесняйтесь удалять это. Спасибо тем, кто добросовестно ответил.
Учитывая следующий скрипт PHP:
<?php error_log('test'); ob_start(); error_log('test2'); ob_end_flush(); ?>
Я получаю следующий вывод журнала ошибок:
[04-Feb-2010 11:30:38] test
Почему выходной буферизацией есть мои сообщения об ошибках? Как я могу заставить его остановиться?
Альтернативно, есть ли другой способ контрабанды сообщений из выходного буфера, или это просто черная дыра?
(Использование PHP 5.2.4-2ubuntu5.10
)
Если вы хотите остановить выполнение PHP-скрипта, скорее бросьте исключение , которое будет проникать в экран ob_start (), ob_end_flush ()
echo 'before output buffer'; ob_start(); throw new Exception('this will be seen'); ob_end_flush();
Не выводить непосредственно с помощью своего метода, скорее используйте класс или holder
который включает в себя журнал (или метод error
в вашем случае), например:
class Logger { private $_messages = array(); public function __construct() { $this->_messages['errors'] = array(); $this->_messages['debug'] = array(); } public function error($msg) { $this->_messages['errors'][] = $msg; } public function debug($msg) { $this->_messages['debug'] = $msg; } public function getErrors() { return $this->_messages['errors']; } } $logger = new Logger(); $logger->error('error1'); ob_start(); $logger->error('error2'); ob_end_flush(); print_r($logger->getErrors());
таким образом вы можете положиться на объект-держатель, он не будет отбрасывать сообщения и получать все ошибки, которые вы хотели отобразить
Я никогда не делал этого на практике, но это должно работать:
Вам нужно будет создать обертку вокруг error_log (), которая