Вероломство
В перерывах между безделием надумалась такая вещь: мне лично иногда по запарке, редко, но вот тупо лень искать на каком этапе скрипта нужно активировать буферизацию — ob_start(), поэтому я просто не стартую её там, где это не очень понятно, НО я знаю где мне нужно сбросить буфер (иначе возникает некоторая каша с некоторым отображением), применяется ob_end_clean(), но тут возникает ошибка — очистка буфера при неактивной буферизации и для её избежания там я делаю некоторый финт с дополнительным ob_start() в классе, где используется очистка.
Читаю функцию ob_get_length() — Возвращает размер в байтах содержимого буфера вывода или false, если буферизация не активна.
Очень стало интересно, сделал так:
Код (Text):
error_reporting(-1); // дебажим, затребует ли ob_start() if (ob_get_length()) ob_end_clean(); // никаких ошибокВопрос: Я правильно понял, что при использовании функции ob_get_length() для такой проверки перед очисткой, включать буферизацию по месту применения очистки не нужно?
То есть такая проверка в любом случае отработает без ошибок, включили мы где-то буфер или нет, правильно? Мне нужно просто не получать ошибку, что я делаю чистку незапущенного буфера.
Я почему спрашиваю, потому что в документации по ob_get_length() дан пример и в нём есть ob_start(), но там и нет такого именно примера на проверку.
MouseZver
Обязательно, иначе как контент в буфер будет попадать.
Вероломство
ты правильно понял смысл +++
но я поэтому и спрашиваю: я делаю очистку перед выводом другого контента, ИНАЧЕ вот это и произойдёт — смешивание, поэтому чтобы не было ошибки пытаюсь проверить его наличие буфера этого
короче у меня глобальный обработчик ошибок стартует РАНЬШЕ приложения, если в приложении ошибка, то подключается вид обработчика ошибок и чтобы мне не выводило кашу вид+вид обработчика, то я чищу буфер, но тогда ошибка, что я чищу неактивный буфер)))) поэтому я дополнительно в обработчике запускаю его )))
хочу избавиться от дополнительного запуска, такая проверка как я понял не затребует его активировать, правильно?
MouseZver
я особо не понял тебя.
Если у нас в скрипте происходит где-то ошибка, то я так понимаю — ты не хочешь чтобы мешало ошибку с остальным контентом. Тогда смотри в сторону https://www.php.net/manual/ru/function.error-get-last.php
— Добавлено —
если есть ошибка, то вывести в переменную — а буфер очистить !
— Добавлено —
Иначе по окончанию скрипта, буфер все равно выдаст, не важно ( использовал ли вывод из буфера или нет )
— Добавлено —
Но сама логика кода отработает если будут игноры/обработки ошибок
Вероломство
ну тут не очень ты понял, дам для наглядности
PHP:
<?php namespace core; use Throwable; class Debug { public static function run() { // Но тогда будет ошибка ob_end_clean() ниже в методе displayError 🙂 set_exception_handler([self::class, ‘exceptionHandler’]); } public static function errorHandler($code, $text, $file, $line) { self::displayError(‘Ошибка’, $code, $text, $file, $line); } private static function displayError($head, $code, $text, $file, $line) { // Удаляем буфер, в котором вьюха ПРИЛОЖЕНИЯ и избавляемся от ошибки, что нету ob_start() 🙂 if ($code != 404) { $code = 500; } http_response_code($code); if (App::$debug) { require_once ‘app/views/layouts/errors/displayError.php’; } else { self::logError($head, $code, $text, $file, $line); require_once «app/views/layouts/errors/{$code}.html»; } } private static function logError($head, $code, $text, $file, $line) { $log_text = «[{$time} — {$head}]nТекст: {$text}nФайл: {$file}nСтрока: {$line}n{$bash}n«; $log_file = «tmp/errors/{$code}/{$date}.log»; } public static function exceptionHandler(Throwable $e) { self::displayError(‘Исключение’, $e->getCode(), $e->getMessage(), $e->getFile(), $e->getLine()); } public static function uncaughtErrorHandler() { if ($e) { self::displayError(‘Неперехваченная ошибка’, $e[‘type’], $e[‘message’], $e[‘file’], $e[‘line’]); } } }надеюсь так будет понятно
Вероломство
не нужна, отбой
Вероломство
блин, нужна
в данном конкретном случае, если отработает register_shutdown_function, то в подключаемый вид обработчика ошибок попадёт стандартный вывод ошибки самого php, поэтому нужно оставить как есть: кидать всё в буфер обработчика, независимо от остальных буферов и потом чистить перед выводом ошибки обработчиком…
решено
Похожие записи:
- Симуляция простого и двойного маятника с помощью Python Tkinter
- Как организовать и сформировать мой код с соблюдением всех принципов ООП
- Базовый калькулятор графического интерфейса Python с использованием tkinter
- Программы C и C ++, позволяющие увеличить время доступа к файлам
- Python, как построить объект более питоническим способом?