Hy communityphp буферизация с ob_start: синхронная альтернатива
У меня проблемы с 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);
} ?>
Хорошо, что происходит, так это то, что буферизация выполняется в соответствии с определением async. Как только первый вызов my_function
будет завершен, весь буфер будет очищен, а «A
» не будет заменен на то, что «A
» должно быть заменено, но также содержит части того, что «B
» должно быть заменено на :). Если есть только одна вещь для замены, это отлично работает (только с одним процессом ob_start
).
Есть ли другой способ поймать вывод вызова или потребовать вызова или запустить ob_*
синхронным способом? Может быть, был бы лучший способ, которого я не нашел. Было бы здорово получить подсказку :).
Заранее благодарен! Может быть, я полностью ошибаюсь, но вот как все учится :).
Счастливой Пасхи, Рето
Ну, это я думал - плохая архитектура. Но спасибо за ответ! Дала мне мотивировку, чтобы снова проверить, почему я делаю то, что делаю, и узнал, что Wordpress предлагает * shortcode API * ... мою ошибку, извините и веселого Рождества! –
BTW: идея, которую я пробовал, более или менее точно соответствует тому, что делает API-интерфейс Wordpress shortcode. Однако, когда такой короткий код зарегистрирован, проблема, с которой я столкнулась с моим ручным решением, больше не встречается, что хорошо :). –