Могу ли я иметь эквивалент ob_implicit_flush() и ob_end_flush() в php.ini?

При пошаговом выполнении кода PHP во время отладки (например, в Netbeans) я хочу немедленно увидеть вывод PHP в своем браузере. Этого можно добиться (по крайней мере, при использовании PHP7.2 и Firefox), включив в начало кода PHP следующее:

  ob_implicit_flush ();
  while (@ob_end_flush());

Это гарантирует, что такие вещи, как

echo "foo\n";

немедленно привести к отображению «foo» в веб-браузере, а не тогда, когда буфер вывода должен быть очищен или код PHP завершает работу после завершения или ошибки.

Но есть ли способ добиться этого, отредактировав php.ini, чтобы мне не приходилось включать его в каждый бит кода PHP для отладки? (Я понимаю, что это приведет к снижению производительности, но это только для целей разработки и отладки.)

Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Что нового в PHP 8.1?
Что нового в PHP 8.1?
Если вы все еще используете PHP 7, то эта статья для вас. В PHP 8, а именно в PHP 8.1, встроены некоторые очень востребованные функции, которые вам...
Разработка LMS на заказ для повышения эффективности работы и обучения
Разработка LMS на заказ для повышения эффективности работы и обучения
За последние годы в образовании произошла большая революция, и сегодня почти все учебные заведения делают упор на эксклюзивное управление учебным...
1
0
77
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Очистка выходного буфера — это неявное действие, которое должен выполнить разработчик, поэтому его нельзя включать или выключать в php.ini.

Однако в PHP есть функция под названием ticks, которая позволяет разработчику регистрировать функцию обратного вызова, которая будет вызываться каждые X строк кода, которые выполняются.

См. register_tick_function, где вы можете определить свою собственную функцию обратного вызова для выполнения сброса и запускать ее между каждым оператором в вашей программе. Это, очевидно, убьет производительность, и, вероятно, есть лучший способ добиться того, что вы пытаетесь сделать.

Пример:

declare(ticks=1);
function autoFlushBuffer() {
  ob_implicit_flush ();
  while (@ob_end_flush());
}
register_tick_function("autoFlushBuffer", true);

// The following lines will appear in your web browser one by one:
echo "one";
sleep(1);
echo "two";
sleep(1);
echo "three";
sleep(1);

Я понимаю, что очистка выходного буфера с помощью [while (@ob_end_flush());] является частью поведения программы, а не конфигурации PHP. Однако ob_implicit_flush() изменяет поведение PHP по умолчанию (включает и выключает неявную очистку, т. е. сбрасывает буфер после каждого вызова вывода), что заставило меня надеяться, что этого можно добиться с помощью php.ini.

Frank van Wensveen 23.05.2019 17:55

Другие вопросы по теме