Minificar saída HTML usando PHP

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

[ Hits: 1.226 ]

 


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

Conhecendo melhor o PHP

Project Euler

Criando um contator de visitas para seu site (PHP grava no TXT)

Servidor interno no PHP 5.4 para testes

Projeto SER disponível

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor HostGator.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Viva o Android

Tópicos

Top 10 do mês

Scripts