синхронизация — php буферизация с помощью ob_start: синхронная альтернатива

Hy сообщество

У меня проблемы с php, и я не смог найти решение. В настоящее время я разрабатываю плагин для WordPress, и я бы хотел манипулировать некоторым контентом. Использование php-буферизации (ob_start), который работает нормально, но доставляет мне новые неприятности. Что я делаю, это следующее (минимизировано).

Предположим, что моя веб-страница содержит следующий текст:

Hy there, my name is A B, I am living in C with my dog D

Что делает код php: замените набор строк выходными данными подфункции. Конечно, это лишь минимальный пример.

<?php
// -----------------------------------------
// The Function loading some content from a php file
function my_function() {
ob_start();
require_once("some_file.php");
$content = ob_get_contents();
ob_end_clean();
return($content); // Returns new content
}
// -----------------------------------------

// Content of the web page
$content = "Hy there, my name is A B, I am living in C with my dog D";

// Strings to replace (by the content returned by "my_function")
$matches = array("A","B","C","D");

// Looping over the different matches
foreach ( $matches as $match ) {

// Calling my_function in buffer mode
$content = str_replace($match,call_user_func("my_function"),$content);


} ?>

Что ж, теперь происходит то, что буферизация выполняется по определению асинхронно. Как только первый my_function вызов завершен, весь буфер будет очищен и «A«не заменено чем»A«должен быть заменен, но также содержит части чего»B«должен быть заменен на :). Если есть только одна вещь, чтобы заменить, это работает отлично (только с одним ob_start процесс).

Есть ли какой-либо другой способ отловить вывод вызова include или require, или запустить ob_* синхронно? Может быть, был бы более приятный способ, которого я не нашел. Было бы здорово получить подсказку :).

Заранее спасибо! Может быть, я совершенно не на том пути, но так учатся :).

С Пасхой,
Рето

-2

Решение

Потому что вы используете require_once.
Но для файла require_once был включен ОДИН РАЗ!
Вы можете использовать требуют или включить для нескольких в том числе.
Но это плохой способ. Плохая архитектура

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]