PHP 7.2 Автоматическое выполнение обратного вызова перед передачей первого байта клиенту

PHP 7.2: Есть ли способ обеспечить "автоматический" вызов функции php до первого байта, отправляемого клиенту?
(HTML-теги или что-то еще) Например: songs.php:

// Please ignore spelling mistakes, and work on concept alone.
require_once('sessionSetup.php');
require_once('setup_Pre_HTML_Tag_Transmission_Enforcer.php');
// The above has a function called: doMyHTMLTags();

doMyStuff(); // Setups, validations
doMoreStuff();
doHTMLContentDisplay();

// I need to execute doMyHTMLTags(), if and when any of the functions starts sending out displayable text.

Пример: если doMoreStuff выполняет DIE('No resources'); или если doMyStuff выполняет { echo 'unexpected issue'; exit; },, мне все равно нужно, чтобы mydoMyHTMLTags() запускался.

Любая помощь будет оценена по достоинству.

Добро пожаловать. Что-то вроде register_shutdown_function? Однако он будет выполнен в конце. Если вы хотите делать что-то в самом начале каждый раз, почему бы просто не сделать это сначала в своем коде?

Jeto 19.09.2018 03:39

Почему здесь актуальна версия PHP? В целом это выглядит как неподходящий программный дизайн.

feeela 19.09.2018 11:37

Поскольку каждая из вышеперечисленных функций добавляет дополнительные функции, которые влияют на исходную функцию, и я не хочу выполнять комбинацию эхо / вызова моей функции / смерти каждый раз, когда я хочу принудительно указать ненормальный путь для отображения. Кстати: register_shutdown_function эквивалентен __destructor в статическом классе. Цените ответ, но это еще не все. Более конкретный пример: разработчик пользовательского интерфейса делает ошибку, которая обнаруживается базовой функцией. Мне нужно иметь возможность использовать критерии + на основе IP + на основе кодировки: печать обратной трассировки / отправка электронных писем / добавление будущих функций @ центральный адрес.

Sasusaan 19.09.2018 11:46
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
37
1

Ответы 1

Не пробовал, но, возможно, ob_start поможет:

ob_start(
    function($buffer) {
        // nothing was produced
        if (strlen($buffer) === 0) {
            return false;
        }

        // prepend our string
        return doMyHTMLTags() . $buffer;
    }
);

doMyStuff(); // Setups, validations
doMoreStuff();
doHTMLContentDisplay();

Если doMyHTMLTags() не возвращает строку, но выводит ее в браузер, вы можете попробовать это (но он всегда будет вызывать doMyHTMLTags):

// get our string from output
ob_start();
doMyHTMLTags();
$my_html_tags = ob_get_clean();

ob_start(
    function($buffer) use ($my_html_tags) {
        // nothing was produced
        if (strlen($buffer) === 0) {
            return $buffer;
        }

        // prepend our string
        return $my_html_tags . $buffer;
    }
);

doMyStuff(); // Setups, validations
doMoreStuff();
doHTMLContentDisplay();

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