Minificar saída HTML usando PHP

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

[ Hits: 5.800 ]

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

Geany IDE: mais do que um simples editor de texto

Ubuntu 10.04: Interpretação de arquivos PHP nas pastas pessoais

Integração com Gerencianet no Magento e OpenCart

Instalando o editor NVU no Kurumin

[RESOLVIDO] Magento: Não consigo fazer login de administrador após instalação

  

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