>>> должен писать только бизнес логику
>> это как, можно подробней?
— Ну то есть, допустим в данном случае, пользователь не должен думать над тем, что будет, если появится ошибка в коде или необработанное исключение. Решения в случае экстренных действий должна решать платформа.
— Пишу собственный мощный фреймворк, поэтому такие узкие вопросы и появляются, пытаюсь «скрыть» максимум проблем от будущего пользователя, который должен писать только бизнес логику.
— Про ошибки 5хх уловил инфу, не знал что 404 хуже чем 503, буду осторожней с этим.
> Критичные ситуации лучше всего ловить Unit-тестами, а если это не возможно, то всеми видами тестирования.
— признаюсь, что очень трудная технология производства через тесты.
— да, модульная система — это сила, один модуль отказал, несколько динамических страниц отвалилась, другие работают. Совершенно согласен.
> пишите без варингов и нотисов
надо вообще синтаксически правильно писать всегда и еще могу добавить, что надо не полениться настроить локальный сервер с xdebug, он имеет классную функцию, приятно для глаз ошибки выводит, и просто без xdebug работать невозможно.
Внимание, заголовки невозможно контролировать с помощью этого метода, так как данные уже отправлены на момент запуска данной функции, пользуйтесь другим способом.
Код на тестирование
register_shutdown_function(array(&$this, 'ShutDown'));
public function ShutDown()
{
if(headers_sent()) {
echo «ой, заголовки уже отправлены»;
}
}
Aco, пожалуйста почитайте это, очень интересно, к сожалению буферизацией лучше пользоваться, чем не пользоваться. habrahabr.ru/blogs/php/45016/, кроме того у меня у самого сейчас все копится в echo, я буду это через буферизацию выводить (ибо идея сама по себе заложена на уровне PHP функций, что бы как можно меньше пользоваться самим языком программирования, так как он медленный). Напрямую выводить, без буферизации выводить к сожалению нельзя по крайней мере в моем случае.
php.net/manual/ru/function.register-shutdown-function.php
Господа, читаем матчасть, написано с 4.1.0 в этой функции можно делать все что требуется. Значит наиболее универсальным решением будет это.
Всем спасибо. Обсуждением 100% можно считать оконечным.
Если вдруг произошла ошибка, будет ли работать header($_SERVER[«SERVER_PROTOCOL»].' '.'503');?
Смотрите. Выполняется код (с ответом 200 Ok, как я привел выше без того куска кода «Решение с заголовками»), происходит ошибка, надо вернуть и заголовки, и результат уведомления для пользователя.
Господа, давайте подискутируем, кого отметить решением? Судя по количеству народа выбирать надо это но, по поводу заголовков я совершенно уверен, что надо тогда решением ставить другой вариант.
Согласен, отличное и не очевидное решение, я бы даже сказал что эта функция будет получше предложенной, за исключением того что приходится самому писать в логи, мне бы хотелось бы от этого абстрагироваться, что я и указал выше. Но такие знания золото. В любом случае, буду знать.
И вообще, в linux идей быть не может, первое куда надо смотреть это на права доступа, далее на настройку софта, вероятно поломанные зависимости, баги в софте (но это крайне мало вероятно).