目前我有一个动态的CSS文件,由PHP从数据库中的结果完成。目前,我正在使用输出缓冲将动态文件转换为静态文件。转换为静态文件的工作原理类似于符咒,但操作是从jQuery对话框窗口调用的。操作完成后,打印一小段HTML来关闭对话框。
问题就在这里。HTML代码被打印出来,而不是被解析。我相信这是因为输出缓冲。当我注释缓冲代码时,一切又正常了。
谁能告诉我出什么事了?使用的代码是:
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);
}
早就知道了。在输出缓冲期间,Content-Type报头似乎发生了变化。在告诉浏览器它应该表现得像一个文本/html页面之后,对话框又像它应该的那样关闭了。谢谢!