在HTML字符串中回显PHP代码

时间:2012-08-26 20:20:36

标签: php codeigniter

我试图通过模板变量显示一堆HTML文本,但它似乎没有处理PHP。我目前在我的视图中使用它(这是codeigniter)

<?php dump($_SESSION); echo (isset($html) && !empty($html)) ? $html : show_404(); ?>

HTML包含几个带有php标签的位置,我希望在页面回显时加载它们。有没有办法做到这一点?

我需要它从我传入的HTML变量工作的主要原因是因为这是页面创建者的一部分,我需要能够在那里填充不在每个页面中的php条件。

3 个答案:

答案 0 :(得分:1)

我个人ob来自一个文件,缓冲它然后使用get_ob_clean得到结果,如下:

    ob_start();
        include 'temp_file_with_html_in';
        $view = ob_get_contents();
    ob_end_clean();

注意:

  • 你的英语不清楚所以我不确定你想要什么
  • 这可能无法完全按照您的意愿使用

也许更好地解释$html是什么以及它是如何来源的?

答案 1 :(得分:0)

有一种方法可以做到这一点,但这很糟糕:eval()

echo (isset($html) && !empty($html)) ? eval($html) : show_404();

答案 2 :(得分:0)

我能想到的最快的方式(虽然如果我知道如何创建 $html,可能会找到更好的解决方案)是将内容放入tmp文件然后包含它。这实际上是一个警告标志,程序存在架构问题(例如,为什么在创建$ html时不能进行php插值?)

$tmpFile = tempnam('/tmp', 'my_app_namespace');
file_put_contents($tmpFile, $html);
include $tmpFile;
unlink($tmpFile); // cleanup

编辑,来自Drupal 7

正如您在评论中暗示的那样,Drupal 7确实包含了我称之为技巧的东西:将PHP 结束标记添加到您传递给eval的代码中,然后将其处理它像常规的PHP包括:

来自Drupal 7的./modules/php/php.module,第79行,改编了一下:

ob_start();
print eval('?>' . $html);
$output = ob_get_clean();