Minificar saída HTML usando PHP

Publicado por Carlos Vinícius dos Santos Dias em 10/02/2016

[ Hits: 5.362 ]

Blog: https://github.com/CViniciusSDias/

 


Minificar saída HTML usando PHP



Recentemente encontrei a necessidade de minificar alguns arquivos para aumentar a nota da empresa no Google PageSpeed Insights. CSS e JS, moleza. Inúmeras ferramentas podem ser encontradas pra isso. Mas, como minificar meu php? Isso me deu alguma dor de cabeça, até que encontrei a função ob_start().

Com ela, você "segura" o buffer de saída, e pode fazer um tratamento nele como, por exemplo, minificar o HTML gerado.

Com expressões regulares, removi espaços desnecessários, comentários etc. Assim, consegui aumentar significantemente a nota do site da empresa!

Para utilizá-la é bem simples. Você precisa criar uma função que tratará o buffer de saída (HTML gerado), e passar seu nome (como string) como parâmetro para ob_start().

No início de um arquivo php, adicione:

<?php
/**
 * @function minify Função que minifica a saída html
 * @param $buffer Recebe todo o buffer de saída, que seria o html normal
 * @return {string} Retorna o html minificado, sem espaços desnecessários ou comentários
 * @author <carlosv775@gmail.com> Vinicius Dias
 */
function minify($buffer)
{
    $search = array(
        "\n",
        "\t",
        "\r",
        "\r\n",
        "\n\r",
    );
    $replace = array();
    
    $buffer = str_replace($search, $replace, trim($buffer));
    
    $search = array(
        '/(\s){2,}/',
        '/\>(\s)+/',
        '/(\s)+\</',
        '/\{(\s)+/',
        '/(\s)+\{/',
        '/\}(\s)+/',
        '/(\s)+\}/',
        '/\((\s)+/',
        '/(\s)+\(/',
        '/\)(\s)+/',
        '/(\s)+\)/',
        '/\=(\s)+/',
        '/(\s)+\=/',
        '/&&(\s)+/',
        '/(\s)+&&/',
        '/(\s)+!/',
        '/<!--[^\[](.*?)-->/',
        '/\/\*(.*?)\*\//',
    );
    
    $replace = array(
        ' ',
        '>',
        '<',
        '{',
        '{',
        '}',
        '}',
        '(',
        '(',
        ')',
        ')',
        '=',
        '=',
        '&&',
        '&&',
        '!',
    );
    $buffer = preg_replace($search, $replace, $buffer);
    
    return $buffer;
}

ob_start("minify");
?>

Espero que seja útil!

Abraços.

Outras dicas deste autor
Nenhuma dica encontrada.
Leitura recomendada

Framework CakePHP - Novo site em português

Encontrando dias em um intervalo de datas em PHP

register_globals e $_REQUEST

Somando datas em PHP

Função em PHP que mostra o número da semana no ano

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts