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_*
синхронно? Может быть, был бы более приятный способ, которого я не нашел. Было бы здорово получить подсказку :).
Заранее спасибо! Может быть, я совершенно не на том пути, но так учатся :).
С Пасхой,
Рето
Потому что вы используете require_once.
Но для файла require_once был включен ОДИН РАЗ!
Вы можете использовать требуют или включить для нескольких в том числе.
Но это плохой способ. Плохая архитектура
Других решений пока нет …