PHP 捕获 eval 输出

Posted

技术标签:

【中文标题】PHP 捕获 eval 输出【英文标题】:PHP catch eval output 【发布时间】:2021-12-30 09:09:42 【问题描述】:

我想catch eval 执行 的输出并且只看到 $B 的输出 ,有什么解决办法吗?

如果我执行这样的代码,我会得到两次输出:

首先来自评估

$B 秒

请不要问我为什么要使用 eval,而那个 eval 是邪恶的。

对于这个例子,我需要一个解决方案。

<?php
  $A = '<?php echo "Output"; ?>';
  eval(" ?> $A <?php ");
  $B = ob_get_contents();
  echo $B;
?>

【问题讨论】:

【参考方案1】:

您没有显示它,因此您需要使用ob_start 开始缓冲。然后获取并清理缓冲区,以便在执行结束时缓冲区为空ob_get_clean:

<?php
  ob_start();
  $A = '<?php echo "Output"; ?>';
  eval(" ?> $A <?php ");
  $B = ob_get_clean();
  echo $B;
?>

您也可以在ob_get_contents 之后的某个位置使用ob_cleanob_end_clean

【讨论】:

以上是关于PHP 捕获 eval 输出的主要内容,如果未能解决你的问题,请参考以下文章

未捕获的 ReferenceError:jQuery 未在 eval 中定义

如何将 PHP 输出捕获到变量中?

PHP 捕获exec()输出

Monolog:捕获错误/异常并在响应中输出消息的处理程序(根据 PHP 默认)

php的异常处理,一个try代码块中抛出了多个异常,怎么全都捕获,并输出来?下面的代码为只输出一个异常?

尝试捕获失败的包含