I want to use PHPWee to minify my site HTML, CSS and JS. Below is the code that I modified it from here:
class WP_HTML_Compression
{
// Settings
protected $compress_css = true;
protected $compress_js = true;
protected $info_comment = true;
protected $remove_comments = true;
// Variables
protected $html;
public function __construct($html)
{
if (!empty($html)) {
$this->parseHTML($html);
}
}
public function __toString()
{
return $this->html;
}
protected function bottomComment($raw, $compressed)
{
$raw = strlen($raw);
$compressed = strlen($compressed);
$savings = ($raw-$compressed) / $raw * 100;
$savings = round($savings, 2);
return '<!--HTML compressed, size saved '.$savings.'%. From '.$raw.' bytes, now '.$compressed.' bytes-->';
}
protected function minifyHTML($html)
{
require_once ("vendor/phpwee-php-minifier/phpwee.php");
return \PHPWee\Minify::html($html);
}
public function parseHTML($html)
{
$this->html = $this->minifyHTML($html);
if ($this->info_comment) {
$this->html .= "\n" . $this->bottomComment($html, $this->html);
}
}
protected function removeWhiteSpace($str)
{
$str = str_replace("\t", ' ', $str);
$str = str_replace("\n", '', $str);
$str = str_replace("\r", '', $str);
while (stristr($str, ' ')) {
$str = str_replace(' ', ' ', $str);
}
return $str;
}
}
function wp_html_compression_finish($html) {
return new WP_HTML_Compression($html);
}
function wp_html_compression_start() {
ob_start('wp_html_compression_finish');
}
add_action('get_header', 'wp_html_compression_start');
But it doesn’t work. I still the the uncompressed HTML, CSS, JS outputs. It also has something strange end the end of the HTML output:
....
....
....
</body>
</html>
<?
namespace PHPWee;
require_once("src/CssMin/CssMin.php");
require_once("src/HtmlMin/HtmlMin.php");
require_once("src/JsMin/JsMin.php");
// Open-source (BSD) PHP inline minifier functions for HTML, XHTML, HTML5, CSS 1-3 and Javascript.
// BSD Licensed - https://github.com/searchturbine/phpwee-php-minifier/blob/master/LICENSE
//
// Usage
// $output = \PHPWee\Minify::html($any_html);
// $output = \PHPWee\Minify::css($any_css);
// $output = \PHPWee\Minify::js($any_js);
class Minify{
public static function html($html){
return HtmlMin::minify($html);
}
public static function css($css){
return CssMin::minify($css);
}
public static function js($js){
return JsMin::minify($js);
}
}
What is going on?
How can I do it properly? Any ideas?
1 Answer
There is little ‘bug’ in PHPWee. It should use <?php
instead of <?
:
<?
namespace PHPWee;
require_once("src/CssMin/CssMin.php");
require_once("src/HtmlMin/HtmlMin.php");
require_once("src/JsMin/JsMin.php");
// Open-source (BSD) PHP inline minifier functions for HTML, XHTML, HTML5, CSS 1-3 and Javascript.
// BSD Licensed - https://github.com/searchturbine/phpwee-php-minifier/blob/master/LICENSE
//
// Usage
// $output = \PHPWee\Minify::html($any_html);
// $output = \PHPWee\Minify::css($any_css);
// $output = \PHPWee\Minify::js($any_js);