【问题标题】:PHP Scoped Output Buffer, How?PHP范围输出缓冲区,如何?
【发布时间】:2017-05-29 02:35:06
【问题描述】:

如何堆叠输出缓冲区,让每个缓冲区都有自己的ID?

所以,我有一个带有缓冲区的 HTML 页面,但也有一个与 a hook 连接的页面内容。钩子本身也包含输出缓冲区:

<?php ob_start(); ?>
<html>
  <head></head>
  <body>
    <?php ob_start(); ?>
    <?php echo $page->content; ?>
    <?php echo ob_get_clean(); ?>
  </body>
</html>
<?php ob_get_clean(); ?>

第一个 ob_get_clean() 刚刚停止了 HTML 页面的输出缓冲区。

那么,有没有可能有这样的机制?

<?php ob_start('#template'); ?>
<html>
  <head></head>
  <body>
    <?php ob_start('#page'); ?>
    <?php echo $page->content; ?>
    <?php echo ob_get_clean('#page'); ?>
  </body>
</html>
<?php ob_get_clean('#template'); ?>

这样每个ob_get_clean()都会有自己的价值:

  • #template&lt;html&gt; … &lt;/html&gt;
  • #page&lt;p&gt;Lorem ipsum dolor sit amet.&lt;/p&gt;

我收到了这些错误:

[28-May-2017 09:17:01 Asia/Jakarta] PHP Fatal error:  Cannot destroy active lambda function in G:\server\www\lot\extend\plugin\lot\worker\block-e\index.php on line 5

[28-May-2017 09:17:01 Asia/Jakarta] PHP Stack trace:

[28-May-2017 09:17:01 Asia/Jakarta] PHP   1. {main}() G:\server\www\index.php:0

[28-May-2017 09:17:01 Asia/Jakarta] PHP   2. require() G:\server\www\index.php:48

[28-May-2017 09:17:01 Asia/Jakarta] PHP   3. Hook::fire() G:\server\www\engine\fire.php:117

[28-May-2017 09:17:01 Asia/Jakarta] PHP   4. call_user_func_array:{G:\server\www\engine\kernel\hook.php:79}() G:\server\www\engine\kernel\hook.php:79

[28-May-2017 09:17:01 Asia/Jakarta] PHP   5. do_fire() G:\server\www\engine\kernel\hook.php:79

[28-May-2017 09:17:01 Asia/Jakarta] PHP   6. Route::fire() G:\server\www\engine\fire.php:113

[28-May-2017 09:17:01 Asia/Jakarta] PHP   7. call_user_func_array:{G:\server\www\engine\kernel\route.php:140}() G:\server\www\engine\kernel\route.php:140

[28-May-2017 09:17:01 Asia/Jakarta] PHP   8. {closure:G:\server\www\lot\extend\page\index.php:46-168}() G:\server\www\engine\kernel\route.php:140

[28-May-2017 09:17:01 Asia/Jakarta] PHP   9. Shield::attach() G:\server\www\lot\extend\page\index.php:166

[28-May-2017 09:17:01 Asia/Jakarta] PHP  10. ob_end_flush() G:\server\www\engine\kernel\shield.php:90

[28-May-2017 09:17:01 Asia/Jakarta] PHP  11. Shield::{closure:G:\server\www\engine\kernel\shield.php:84-88}() G:\server\www\engine\kernel\shield.php:90

[28-May-2017 09:17:01 Asia/Jakarta] PHP  12. Hook::NS() G:\server\www\engine\kernel\shield.php:86

[28-May-2017 09:17:01 Asia/Jakarta] PHP  13. call_user_func_array:{G:\server\www\engine\kernel\hook.php:94}() G:\server\www\engine\kernel\hook.php:94

[28-May-2017 09:17:01 Asia/Jakarta] PHP  14. Hook::fire() G:\server\www\engine\kernel\hook.php:94

[28-May-2017 09:17:01 Asia/Jakarta] PHP  15. call_user_func_array:{G:\server\www\engine\kernel\hook.php:79}() G:\server\www\engine\kernel\hook.php:79

[28-May-2017 09:17:01 Asia/Jakarta] PHP  16. fn_twitter_cards_replace() G:\server\www\engine\kernel\hook.php:79

[28-May-2017 09:17:01 Asia/Jakarta] PHP  17. Page->__get() G:\server\www\engine\kernel\hook.php:8

[28-May-2017 09:17:01 Asia/Jakarta] PHP  18. Hook::NS() G:\server\www\engine\kernel\page.php:79

[28-May-2017 09:17:01 Asia/Jakarta] PHP  19. call_user_func_array:{G:\server\www\engine\kernel\hook.php:94}() G:\server\www\engine\kernel\hook.php:94

[28-May-2017 09:17:01 Asia/Jakarta] PHP  20. Hook::fire() G:\server\www\engine\kernel\hook.php:94

[28-May-2017 09:17:01 Asia/Jakarta] PHP  21. call_user_func_array:{G:\server\www\engine\kernel\hook.php:79}() G:\server\www\engine\kernel\hook.php:79

[28-May-2017 09:17:01 Asia/Jakarta] PHP  22. fn_image_set() G:\server\www\engine\kernel\hook.php:79

[28-May-2017 09:17:01 Asia/Jakarta] PHP  23. Page->get() G:\server\www\lot\extend\plugin\lot\worker\image\index__.php:7

[28-May-2017 09:17:01 Asia/Jakarta] PHP  24. Page->content() G:\server\www\engine\kernel\page.php:170

[28-May-2017 09:17:01 Asia/Jakarta] PHP  25. Page->__call() G:\server\www\engine\kernel\page.php:170

[28-May-2017 09:17:01 Asia/Jakarta] PHP  26. Page->__get() G:\server\www\engine\kernel\page.php:42

[28-May-2017 09:17:01 Asia/Jakarta] PHP  27. Hook::NS() G:\server\www\engine\kernel\page.php:79

[28-May-2017 09:17:01 Asia/Jakarta] PHP  28. call_user_func_array:{G:\server\www\engine\kernel\hook.php:94}() G:\server\www\engine\kernel\hook.php:94

[28-May-2017 09:17:01 Asia/Jakarta] PHP  29. Hook::fire() G:\server\www\engine\kernel\hook.php:94

[28-May-2017 09:17:01 Asia/Jakarta] PHP  30. call_user_func_array:{G:\server\www\engine\kernel\hook.php:79}() G:\server\www\engine\kernel\hook.php:79

[28-May-2017 09:17:01 Asia/Jakarta] PHP  31. fn_block_replace_e() G:\server\www\engine\kernel\hook.php:79

[28-May-2017 09:17:01 Asia/Jakarta] PHP  32. Block::replace() G:\server\www\lot\extend\plugin\lot\worker\block-e\index.php:9

[28-May-2017 09:17:01 Asia/Jakarta] PHP  33. preg_replace_callback() G:\server\www\lot\extend\block\engine\kernel\block.php:73

[28-May-2017 09:17:01 Asia/Jakarta] PHP  34. Block::{closure:G:\server\www\lot\extend\block\engine\kernel\block.php:69-73}() G:\server\www\lot\extend\block\engine\kernel\block.php:73

[28-May-2017 09:17:01 Asia/Jakarta] PHP  35. call_user_func_array:{G:\server\www\lot\extend\block\engine\kernel\block.php:72}() G:\server\www\lot\extend\block\engine\kernel\block.php:72

[28-May-2017 09:17:01 Asia/Jakarta] PHP  36. {closure:G:\server\www\lot\extend\plugin\lot\worker\block-e\index.php:4-9}() G:\server\www\lot\extend\block\engine\kernel\block.php:72

[28-May-2017 09:17:01 Asia/Jakarta] PHP  37. ob_start() G:\server\www\lot\extend\plugin\lot\worker\block-e\index.php:5

谢谢。

【问题讨论】:

标签: php output-buffering


【解决方案1】:

您需要将 ob_get_clean 的值赋给一个变量

<?php ob_start(); ?>
<html>
  <head></head>
  <body>
    <?php ob_start(); ?>
    <?php echo '$page->content'; ?>
    <?php $inner = ob_get_clean(); ?>
  </body>
</html>
<?php $outer = ob_get_clean(); ?>
<?php var_dump($inner, $outer); ?>

请注意,我在 $page->content 周围加上了引号,以便于阅读此代码,您不应使用这些引号。

【讨论】:

  • 是的,每次输出缓冲区结束时,我都会将输出内容放在一个变量上。这就是我使用输出缓冲区的原因。但我不知道为什么会有这些错误消息。
猜你喜欢
  • 1970-01-01
  • 2011-07-24
  • 1970-01-01
  • 2012-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多