如何uglify / minify PHP输出?

时间:2015-08-10 23:41:22

标签: javascript php gruntjs

我知道PHP生成的输出将遵循我的代码编写方式。例如:

echo '<div id="test">';
echo '<div id="other-test>';
echo '</div>';
echo '</div>';

将输出类似

的内容
<div id="test">
<div id="other-test">
</div>
</div>

有没有办法生成这样的东西而不改变我的代码?

<div id="test"><div id="other-test"></div></div>;

就像grunt对.js文件一样。

我知道我可以更改源代码以获得此输出,但这会使代码在开发过程中难以阅读。

为什么我要这样做?因为如果我打开我的应用程序的html输出源,我会看到很多换行符和空格,我想如果我能够驾驭它,那么就需要更少的网络流量。

谢谢!

1 个答案:

答案 0 :(得分:1)

我使用输出缓冲。你有这样的东西

<?php
echo '<div id="test">';
echo '<div id="other-test>';
//a lot of other complicated output logic

echo '</div>';
echo '</div>';

首先,在代码开始时添加一个调用以启动输出缓冲。这将阻止PHP发送输出。

<?php
ob_start();    
echo '<div id="test">';
echo '<div id="other-test>';
//a lot of other complicated output logic    
echo '</div>';
echo '</div>';    

然后,在长复杂输出代码的末尾,使用ob_get_clean()

<?php    
ob_start();    
echo '<div id="test">';
echo '<div id="other-test>';
//a lot of other complicated output logic    
echo '</div>';
echo '</div>';    

$output = ob_get_clean();

ob_get_clean的调用将丢弃输出缓冲区(PHP不会回显任何内容),但在执行此操作之前返回输出缓冲区的内容(即$output将包含一个字符串本来会输出)。

然后你自己echo之前可以自由地修改你喜欢的字符串

<?php    
ob_start();    
echo '<div id="test">';
echo '<div id="other-test>';
//a lot of other complicated output logic    
echo '</div>';
echo '</div>';    

$output = ob_get_clean();

//remove newlines and carriage returns
$output = str_replace("\r", '', $output);            
$output = str_replace("\n", '', $output);                
$output = someOtherMinifyFunction($output);
echo $output;