【发布时间】:2011-09-17 17:23:36
【问题描述】:
我正在使用 PHP 创建基于用户代理的动态样式表:
AddHandler application/x-httpd-php .css
然后我使用 gzip(基于 php.ini)将它们发送给客户端:
output_handler = ob_gzhandler
但我也想缩小我的动态样式表的内容以获得更好的性能......所以,在我的样式表的末尾我放了:
input.confirmation
{
<?php if ($Browser == 'lt8') { ?>
margin-top: 1px;
<?php } else { ?>
margin-top: 3px;
<?php } ?>
}
<?php echo Minify(ob_get_clean()); ?>
其中 "function Minify($CSSCode)" 只返回我在参数中输入的字符串的缩小版本。问题是这只是输出一个空的样式表。我还尝试了以下代码:
<?php
$Content = ob_get_contents();
ob_clean();
echo Minify($Content);
?>
但我得到相同的结果:空文件。如果我改用:
<?php echo Minify(ob_get_contents()); ?>
我的 shylesheet 将包含未缩小和缩小的代码。 我想到的一个解决方案是将每个样式表行连接到一个变量中,并在最后打印出来,如下所示:
$CSSCode = '';
[...]
$CSSCode .= "#header";
$CSSCode .= "{";
$CSSCode .= " display: block;";
$CSSCode .= " height: 100px;";
$CSSCode .= "}";
[...]
echo Minify($CSSCode);
但我宁愿避免这种做法,因为:
- 如果需要,修改我的 CSS 将是一场真正的噩梦。
- 我的整个网站只有一个样式表,而且它很长...因此将其转换为基于变量的样式表可能会非常耗时。
如何正确清除和覆盖输出缓冲区?
提前致谢!
【问题讨论】:
标签: php output-buffering