PHP输出缓冲区内容
我正在使用PHP创建基于用户代理的动态样式表,包括:PHP输出缓冲区内容,php,output-buffering,Php,Output Buffering,我正在使用PHP创建基于用户代理的动态样式表,包括: AddHandler application/x-httpd-php .css 我使用gzip(基于php.ini)将它们发送到客户端: 但我也想缩小我的动态样式表的内容,以获得更好的性能。。。因此,在我的样式表末尾,我放了: input.confirmation { <?php if ($Browser == 'lt8') { ?> margin-top: 1px; <?php } else { ?>
AddHandler application/x-httpd-php .css
我使用gzip(基于php.ini)将它们发送到客户端:
但我也想缩小我的动态样式表的内容,以获得更好的性能。。。因此,在我的样式表末尾,我放了:
input.confirmation
{
<?php if ($Browser == 'lt8') { ?>
margin-top: 1px;
<?php } else { ?>
margin-top: 3px;
<?php } ?>
}
<?php echo Minify(ob_get_clean()); ?>
但我宁愿避免这种做法,因为:
提前谢谢 在
ob_start
之后,必须ob_end_clean
(或使用其变体之一),否则输出缓冲仍处于打开状态,并且不会输出任何内容。=)
您可以做的是在脚本的开头再次执行显式的
ob_start()
,这样您就可以得到第二个可以嵌套的缓冲区。一般来说,压缩应该很好地处理空白,因此缩小操作的增益最终应该不会太明显
备注:当从脚本生成CSS等时,请确保设置正确的缓存过期头,这样客户端不会每次都请求CSS文件,而是缓存它们。这带来了比您可以做的任何其他事情都更大的收益。我没有在文件开头使用ob_start(),因为在php.ini中我设置了:“output_buffering=On”。不是吗?@Zarathos啊,那么你会想按照johannes的建议去做。我正计划在CSS中为我的图像文件添加一个指纹识别/版本控制系统,因为它们的过期“访问时间加上3个月”,但如果我这样做,我将无法缓存style.CSS。。。因为,如果我更改了一个图像,它在CSS中的指纹也会更改,如果我的任何图像的最后修改时间戳大于样式表,我应该发送一个全新的style.CSS(带有正确的指纹)。我尝试在开始时使用“ob_start()”,然后在结束时使用“echo Minify(ob_get_clean());ob_end_flush()”。它就像一个符咒。我希望它是正确的。如果我们需要将缓冲区结果作为临时文件,我们可以使用以下代码:
$fp=tmpFile();fwrite($fp,ob_get_contents());fseek($fp,0)代码>
input.confirmation
{
<?php if ($Browser == 'lt8') { ?>
margin-top: 1px;
<?php } else { ?>
margin-top: 3px;
<?php } ?>
}
<?php echo Minify(ob_get_clean()); ?>
<?php
$Content = ob_get_contents();
ob_clean();
echo Minify($Content);
?>
<?php echo Minify(ob_get_contents()); ?>
$CSSCode = '';
[...]
$CSSCode .= "#header";
$CSSCode .= "{";
$CSSCode .= " display: block;";
$CSSCode .= " height: 100px;";
$CSSCode .= "}";
[...]
echo Minify($CSSCode);