Как исправить ошибку ob_end_flush()?

12 февр. 2017 г., 07:26:25
Просмотры: 22K
Голосов: 4

В нижней части моих страниц WP-admin появляется следующее:

ob_end_flush(): не удалось отправить буфер сжатия вывода zlib (1) в C:\Users\anticaking\Desktop\Website\wordpress\wp-includes\functions.php на строке 3718.

Строка 3718:

function wp_ob_end_flush_all() {
    $levels = ob_get_level();
    for ($i=0; $i<$levels; $i++)
        ob_end_flush();
}

Я удалил все плагины и поменял темы, но все равно получаю эту ошибку, поэтому не могу определить, что является причиной. Что это такое и как это исправить?

3
Комментарии

Возможный дубликат ошибка ob_end_flush при использовании wpdb в плагине

prosti prosti
12 февр. 2017 г. 12:29:00

Какая у вас версия PHP?

prosti prosti
12 февр. 2017 г. 12:29:23

@prosti версия 7.0.9

lurning too koad lurning too koad
12 февр. 2017 г. 18:53:49
Все ответы на вопрос 4
0

У меня тоже была такая проблема с WordPress, и я не смог её правильно решить. В итоге пришлось использовать этот грязный хак, чтобы ошибка не отображалась:

// Получаем текущий уровень отчетности об ошибках
$e_level = error_reporting();

// Отключаем вывод ошибок
error_reporting(0);

ob_start();
echo 'Это ужасный хак';
$buffer_contents = ob_get_clean();
ob_end_flush();

// Восстанавливаем предыдущий уровень отчетности об ошибках
error_reporting($e_level);

Всё действительно работает как ожидалось, но мне совсем не гордиться этим решением!

11 окт. 2018 г. 16:34:42
0

bool ob_end_flush ( void ) Эта функция отправит содержимое самого верхнего буфера вывода (если он есть) и отключит этот буфер вывода. Если вы хотите дальше обрабатывать содержимое буфера, вам нужно вызвать ob_get_contents() перед ob_end_flush(), так как содержимое буфера удаляется после вызова ob_end_flush().

Подробнее: http://php.net/manual/ru/function.ob-end-flush.php

Попробуйте это, добавьте в файл functions.php. remove_action( 'shutdown', 'wp_ob_end_flush_all', 1 );

30 дек. 2017 г. 12:36:19
2

Я не рекомендую полностью отключать функцию wp_ob_end_flush_all(), так как она существует не просто так. Вместо этого попробуйте заменить её следующим кодом:

/**
 * Правильный ob_end_flush() для всех уровней
 *
 * Эта функция заменяет стандартную WordPress-функцию `wp_ob_end_flush_all()`
 * на вариант, который не вызывает PHP-уведомлений.
 */
remove_action( 'shutdown', 'wp_ob_end_flush_all', 1 );
add_action( 'shutdown', function() {
   while ( @ob_end_flush() );
} );

У меня есть статья с подробным объяснением происходящего и почему этот способ является оптимальным решением: Быстрое исправление ошибки ob_end_flush() в WordPress

11 дек. 2019 г. 20:58:05
Комментарии

Кевин Лири, у меня не сработало. Я использую WordPress 5.7

francesco bonetti francesco bonetti
9 апр. 2021 г. 22:57:27

Скорее всего, это ошибка на уровне сервера, а не связанная с версией WP. Проблема связана с PHP-библиотекой сжатия под названием zlib.

Kevinleary.net Kevinleary.net
27 авг. 2021 г. 17:22:29
0

Я попробовал метод грубой силы, который сработал (я не совсем доволен этим решением, но надеюсь, это может помочь кому-то):

В последнюю строку файла functions.php в папке /wp-content/themes/<директория_темы> добавьте следующую строку:

ob_get_clean();
13 июн. 2021 г. 17:31:22