Странности с буферизацией, сжатием страниц, своим обработчиком оишбок, редекларацией

Istamendil

Новичок
Странности с буферизацией, сжатием страниц, своим обработчиком оишбок, редекларацией

Проблема заключается в странном (на мой взгляд) поведении буферизационного механизма...
У меня есть класс, в конструторе которого начинается буферизация вывода с GZIP. В деструкторе прописан ob_end_flush(). Всё это работает нормально, если я сам вызываю деструктор в конце скрипта... Иначе, если он мной самим не вызван пхп выводит, что нет буфера (ob_end_flush() [ref.outcontrol]: failed to delete and flush buffer. No buffer to delete or flush. in...) ... Я вывел, что это происходит , если вывести сторку перед началом буферизации (
PHP:
echo 'бла-бла'; $page=new output();
)... Не совсем понимаю почему...
Но тут есть гораздо более интеречный момент (опять же на мой взгляд).
Я перед созданием обьекта вышеупомянутого класса (с буферизацией) я регистрирую свой обработчик ошибок, в котором (в функции) обьявлена внутренняя функция, у меня выводится ошибка о редекларации этой внутренней функции! Причём пишет, что она была объявлена в том же файле и в той же строке и ничего не пишут про функцию обработчика оишбок... Я пробовал переименовывать внутреннюю функцию. Это "прекратилось" только после выключения GZIP сжатия в вышеупомянутом классе. И опять таки если перед созданием обьекта у меня был вывод строки... Без него, как и без GZIP, всё идёт нормально. Видел похожую проблему (там другое направление, но также зависимоть и от сжатия) : http://phpclub.ru/talk/forumdisplay.php?forumid=12.
Дополнительная инфа:
- Денвер (Apache 1.3, PHP 5.04)
- Ошибка с редекларацией возникает только если обьявить функцию с "редекларированными" функциями как обработчик ошибок
З.ы. Можно было бы и забить - не выводить никаких строк перед буферизацией (в смысле их и не надо выводить), но с причинами проблемами хочется разобраться и предусмотреть всякие экстренные случаи.
 

SiMM

Новичок
> это происходит , если вывести сторку перед началом буферизации
Если Вы собираетесь сжимать контент gzip'ом - перед его отдачей не должно быть никакого вывода.

> Я перед созданием обьекта вышеупомянутого класса (с буферизацией) я регистрирую свой обработчик ошибок, в котором (в функции) обьявлена внутренняя функция, у меня выводится ошибка о редекларации этой внутренней функции!

Давайте Вы не будете пересказывать своими словами сообщение об ошибке, а, как полагается правилами, будете тупо её копировать в форум.

> Видел похожую проблему (там другое направление, но также зависимоть и от сжатия) : http://phpclub.ru/talk/forumdisplay.php?forumid=12
Ага. Там похожих проблем - сотни. Ссылки-то надо более осмысленные давать.
 

Istamendil

Новичок
Спасибо за ответ.
Учту советы о формулировке на будещее.
ПРоблема решена. Может кому пригодится для размышлений...
Вся заключалось в том, что после вывода строки отправлялась шапка-> нет сжатия нормального (в смысле нормального заголовка). В функции обработчика ошибок определялись функции при каждом её вызове -> редекларация.
2SiMM: там также связь со сжатием и подобной проблемой.
Закрыли тему...
 
Сверху