...
Итак. Залив сайт на хостинг, где используется PHP5 (а не 4) я обнаружил, что сервер отвечает пустой страницей. "Трассирируя скрипты", перетавляя die("Exection at ".__LINE__); на строчку дальше и дальше, я выяснил что скрипт выполняется до конца.
Посколько вывод у меня буферизируется, и установлен кэлбэк, единственным местом, где происходит crash может быть только он.
Так как в OB-Callback-е глупо делать die-и и echo-ы, я поставил в самое начало
return "Возврат со строчки ".__LINE__;
Сделал запрос, получил "Возврат со строчки...". Точно также перемещая этот "брекпоинт" всё дальше и дальше, установил, после какой строчки сервер начинает отвечать не сообщением "Возвраст со строчки...", а пустой страницей.
Итак вот начало фунции-кэлбэка.
- Код: Выделить всё
function __obcallbacker($bufferdata, $mode)
{
global $relpath;
global $page;
global $config;
global $userdata;
$page->__auto_class_detection = ACD_MANUAL;
return "Ура!!! Работает!!! Строчка ".__LINE__;
При таком положении "ретурна", сервер отвечает пустой страницей.
А при такой:
- Код: Выделить всё
function __obcallbacker($bufferdata, $mode)
{
global $relpath;
global $page;
global $config;
global $userdata;
return "Ура!!! Работает!!! Строчка ".__LINE__;
$page->__auto_class_detection = ACD_MANUAL;
отвечает, как и положено, строчкой
"Ура!!! Работает!!! Строчка ..."Отсюда делаем вывод что падение происходит на инструкции
$page->__auto_class_detection = ACD_MANUAL;
Что может быть ошибочного в этой инструкции? Переменная $page "заглобалена", никто её нигде не unset-ит.
Ладно!, - подумал я, - проверим!.
Убрал нафиг буферизацию вывода, и тупо вызвал функцию __obcallbacker:
- Код: Выделить всё
>>> БЫЛО <<<
$page = new CTemplater();
$page->acd(ACD_NORMAL);
ob_start("__obcallbacker");
>>>Стало<<<
$page = new CTemplater();
$page->acd(ACD_NORMAL);
die(__obcallbacker("asdffffasdfas",2));
Функция нормально сработала, и инструкция $page->__auto_class_detection = ACD_MANUAL; успешно выполнилась, и die(__obcallbacker("asdffffasdfas",2)) вывел мне то что я и ждал.
Злюсь :wall: и не понимаю, с какого такого фига обращение к члену класса из кэлбэка вызывает падение (с выдачей пустой страницы).
Причём именно на php5.
Под php4 всё работает как часы... и на Денвере, и на
стороннем хостинге (в данном случае петерхосте)