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() запускался.
Любая помощь будет оценена по достоинству.
Почему здесь актуальна версия PHP? В целом это выглядит как неподходящий программный дизайн.
Поскольку каждая из вышеперечисленных функций добавляет дополнительные функции, которые влияют на исходную функцию, и я не хочу выполнять комбинацию эхо / вызова моей функции / смерти каждый раз, когда я хочу принудительно указать ненормальный путь для отображения. Кстати: register_shutdown_function эквивалентен __destructor в статическом классе. Цените ответ, но это еще не все. Более конкретный пример: разработчик пользовательского интерфейса делает ошибку, которая обнаруживается базовой функцией. Мне нужно иметь возможность использовать критерии + на основе IP + на основе кодировки: печать обратной трассировки / отправка электронных писем / добавление будущих функций @ центральный адрес.






Не пробовал, но, возможно, 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();
Добро пожаловать. Что-то вроде
register_shutdown_function? Однако он будет выполнен в конце. Если вы хотите делать что-то в самом начале каждый раз, почему бы просто не сделать это сначала в своем коде?