Minify HTML, CSS, JS with PHPWee?

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
1

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);

Leave a Comment