За последние 24 часа нас посетили 22900 программистов и 1238 роботов. Сейчас ищет 751 программист ...

С какой версии буфер включён по умолчанию?

Тема в разделе "PHP для новичков", создана пользователем Вероломство, 29 мар 2022.

  1. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    615
    Симпатии:
    24
    PHP:
    1. <?php
    2.  
    3.  
    4. namespace core;
    5.  
    6.  
    7. use app\actions\error\ErrorAction;
    8. use Exception;
    9. use Throwable;
    10.  
    11. class ErrorHandler
    12. {
    13.     public function __construct($mode, $logs)
    14.     {
    15.         // ob_start();
    16.    
    17.         set_error_handler(function ($code, $text, $file, $line) use ($mode, $logs) {
    18.             $this->show($mode, $logs, 'Ошибка', $code, $text, $file, $line);
    19.         });
    20.  
    21.         set_exception_handler(function (Throwable $t) use ($mode, $logs) {
    22.             $this->show($mode, $logs, 'Исключение', $t->getCode(), $t->getMessage(), $t->getFile(), $t->getLine());
    23.         });
    24.  
    25.         register_shutdown_function(function () use ($mode, $logs) {
    26.             $e = error_get_last();
    27.  
    28.             if ($e) {
    29.                 $this->show($mode, $logs, 'Неперехваченная ошибка', $e['type'], $e['message'], $e['file'], $e['line']);
    30.             }
    31.         });
    32.  
    33.         if (!in_array(strtolower($mode), ['development', 'production'])) {
    34.             throw new Exception("Неправильно указан режим отладки приложения: $mode");
    35.         }
    36.  
    37.         if (!in_array(strtolower($logs), ['off', 'on'])) {
    38.             throw new Exception("Неправильно указан режим логирования отладки приложения: $logs");
    39.         }
    40.     }
    41.  
    42.     public function show($mode, $logs, $head, $code, $text, $file, $line)
    43.     {
    44. //        ob_end_clean();
    45.    
    46.         if (ob_get_length()) {
    47.             ob_clean();
    48.         }
    49.  
    50.         if ($code !== 404) {
    51.             $code = 500;
    52.         }
    53.  
    54.         http_response_code($code);
    55.  
    56.         call_user_func(new ErrorAction(), $mode, $logs, $head, $code, $text, $file, $line);
    57.     }
    58. }
    Тот кто увидит закомментированный код, тот поймёт суть вопроса.

    Дело в том, что всё работает на 7.4.28, а с какой версии можно не прописывать ob_start()?

    И кстати!!! Если я убираю условие и оставляю ob_end_clean() то получаю отлуп, что буфер не включен, чтобы что-то чистить: нужно в конструктор тогда добавлять ob_start(), ПОЧЕМУ, если он уже включен по дефолту?
     
    #1 Вероломство, 29 мар 2022
    Последнее редактирование: 29 мар 2022