【问题标题】:PHP - print content from file after manipulationPHP - 操作后从文件中打印内容
【发布时间】:2010-04-22 20:15:06
【问题描述】:

我正在努力尝试读取 php 中的 php 文件并进行一些操作..之后将内容作为字符串,但是当我尝试使用 echo 或 print 输出它时,所有的 php 标签都包含在文件。

这是我的代码:

function compilePage($page,$path){
   $contents = array();
   $menu = getMenuFor($page);
   $file = file_get_contents($path);
   array_push($contents,$menu);
   array_push($contents,$file);
   return implode("\n",$contents);
}

这将返回一个类似的字符串

<div id="content>
   <h2>Here is my title</h2>
   <p><? echo "my body text"; ?></p>
</div>

但这将完全打印上面的内容,而不是在上面编译php。

那么,我如何渲染这个“compilePage”以确保它返回一个编译的 php 结果,而不仅仅是一个纯文本?

提前致谢

【问题讨论】:

标签: php string file compilation printf


【解决方案1】:
function compilePage($page, $path) {
    $contents = getMenuFor($page);
    ob_start();
    include $path;
    $contents .= "\n".ob_get_clean();
    return $contents;
}

要评估字符串中的 PHP 代码,您可以使用 eval 函数,但高度不建议这样做。如果您有一个包含 PHP 代码的文件,您可以根据需要使用includeinclude_oncerequirerequire_once 对其进行评估。要捕获包含文件的输出(或必需的或任何方法),您需要启用output buffering

【讨论】:

  • 感谢 erisco,我不确定其他解决方案,但这似乎是最简单的解决方案。 :) 干杯
【解决方案2】:

您可以为此使用output buffering,并正常使用include该文件:

function compilePage($page,$path){
   $contents = array();
   $menu = getMenuFor($page);
   ob_start();
   include $path;
   $file = ob_get_contents();
   ob_end_clean();
   array_push($contents,$menu);
   array_push($contents,$file);
   return implode("\n",$contents);
}

include() 调用将正常包含 PHP 文件,&lt;?php 块将被解析并执行。任何输出都将被ob_start() 创建的缓冲区捕获,稍后您可以使用其他ob_* 函数获取它。

【讨论】:

    【解决方案3】:

    您需要使用include() 才能执行。您可以将它与output buffering 结合起来以获取字符串中的返回值。

    函数 compilePage($page,$path){ $内容=数组(); $menu = getMenuFor($page);

    //output buffer
    ob_start();
    include($path);
    $file = ob_get_contents();
    ob_end_clean();   
    
    array_push($contents,$menu);
    array_push($contents,$file);
    return implode("\n",$contents);
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-25
      • 1970-01-01
      • 2012-06-12
      • 1970-01-01
      • 2017-01-23
      • 1970-01-01
      相关资源
      最近更新 更多