You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中捕获eval执行输出并仅显示$B内容的解决方案

解决方案

要解决重复输出的问题,关键是在eval执行前就开启输出缓冲,这样eval产生的输出会被捕获到缓冲里,不会直接输出到页面,之后我们获取缓冲内容到$B,再清空缓冲,最后只打印$B就不会重复了。

修改后的代码如下:

<?php
ob_start(); // 提前开启输出缓冲,捕获后续所有输出
$A = '<?php echo "Output"; ?>';
eval(" ?> $A <?php ");
$B = ob_get_contents(); // 获取缓冲内容
ob_end_clean(); // 清空缓冲并不输出,避免之前的内容泄露
echo $B; // 只打印一次$B的内容
?>

为什么这样有效?

  • ob_start()会开启输出缓冲,后续所有本应直接输出的内容都会被暂存到内存缓冲区里,不会直接发送到浏览器。
  • ob_end_clean()会清空当前的输出缓冲,并且关闭缓冲,这样eval执行产生的内容就不会被意外输出,我们只保留了存到$B里的内容。
  • 最后只执行echo $B,自然就只会输出一次想要的内容。

内容的提问来源于stack exchange,提问作者ReflectYourCharacter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 02:12:40