输出缓冲包含更多代码

时间:2011-09-13 14:47:52

标签: php output-buffering

目前我有一个动态CSS文件,由PHP从数据库中的结果完成。目前我正在使用输出缓冲将动态文件转换为静态文件。转换为静态文件的工作方式类似于魅力,但该操作是从jQuery对话框窗口调用的。操作完成后,将打印一小段HTML以关闭对话框。

这就是问题所在。 HTML代码被打印而不是解析。我相信这是因为输出缓冲。当我评论缓冲代码时,一切都会再次起作用。

有人可以告诉我出了什么问题吗?

OB im使用的代码是:

ob_start();
$MC_ParseTemplateCall = 1;  # is used in the include to set some values         
require_once($Template); # Template contains the path and filename
$templateCss = ob_get_contents(); #using this to store it with fopen, fwrite & fclose
ob_end_clean();

其他信息:

从save.php这个文件(在jQuery对话框中执行)

<?php
    // stuff to save template related settings happens above

    # Make a static CSS file
    ParseAndStoreTemplate(DIR_PATH_TO_ROOT."../website/Templates/MyTpl2011/CSS/MyTpl2011.php");
?>
<html>
    <body onLoad="window.parent.CloseDialog();"></body>
</html> 

存储模板的功能:

function ParseAndStoreTemplate($Template)
{
    if(is_file($Template))
    {
        ob_start();
        $MC_ParseTemplateCall = 1;              
        require_once($Template);
        $templateCss = ob_get_contents();
        ob_end_clean();

        $fileName   = end(explode("/", $Template));
        $templateName   = reset(explode(".php", $fileName));
        $websitePath    = DIR_PATH_TO_ROOT."../Global/Files/Website/".$GLOBALS["WebsiteId"]."/";
        $templateFolder = "CSS";

        if(!is_dir($websitePath.$templateFolder))
            mkdir($websitePath.$templateFolder);

        file_put_contents(  
            $websitePath.$templateFolder."/".$templateName,
            $templateCss);
    }
    else
        die("<strong>Opgegeven templatebestand bestaat niet</strong>: ".$Template);
}

1 个答案:

答案 0 :(得分:0)

已经弄清楚了。似乎在输出缓冲期间Content-Type标头被更改。告诉浏览器它应该像text / html页面一样,对话框会像它应该的那样再次关闭。不管怎样,谢谢!