CSS Dinâmico

Artigo que explica como é possível gerar um arquivo CSS através de um script PHP e algumas utilidades de se montar um CSS dinâmico.

Normalmente a linguagem PHP é utilizada para gerar HTML dinamicamente. Porém, a linguagem PHP pode gerar qualquer tipo de arquivo, desde que se conheça a especificação do tipo de arquivo. Gerar um arquivo CSS dinamicamente é muito simples pois é um tipo de arquivo texto com uma sintaxe bastante simples.

Todo arquivo enviado do servidor para o cliente (navegador) através do protocolo HTTP precisa especificar o tipo de arquivo que está sendo trafegado. Isso é informado no cabeçalho HTTP. Quando se faz um script com extensão ".php" e não se define um tipo explicitamente, o servidor HTTP monta o cabeçalho HTTP com um tipo padrão, que normalmente é "text/html", mas isso pode ser configurado tanto no servidor (php.ini) quanto no script PHP.

No arquivo php.ini, pode ser definida a diretiva default_mimetype assim:

default_mimetype = "text/html"

No script PHP, o valor padrão de mimetype pode ser definido usando a função ini_set:

ini_set('default_mimetype', 'text/html');

Porém, isso é feito para se definir o valor padrão caso o tipo não seja especificado explicitamente. Para definir o tipo explicitamente, usa-se a função header, que deve ser chamada antes que qualquer informação seja impressa (com echo, print, ou semelhante).

Veja um exemplo de arquivo CSS gerado dinamicamente (chamado "teste.css.php"):

<?php

$cor1 = isset($_COOKIE['cor1']) ? $_COOKIE['cor1'] : '#FFFFFF';
$cor2 = isset($_COOKIE['cor2']) ? $_COOKIE['cor2'] : '#000000';

header('Content-type: text/css; charset=UTF-8');
echo <<<ARQUIVO

.erro {
  color: red;
}

.aviso {
  color: green;
}

#principal {
  background-color: {$cor1};
  color: {$cor2};
}

ARQUIVO;

Note que o arquivo é gerado com cores gravadas nos Cookies. Isso significa que o sistema pode ter alguma ferramenta em que o usuário possa configurar as cores desejadas e estes valores ficam guardados em Cookie (ou em BD, se preferir).

Fazer um CSS dinâmico também pode ser útil para especificar caminhos absolutos para arquivos de imagens, por exemplo.

Caso o script gere um arquivo que não sofre mudanças, é possível especificar um tempo em que ele possa ser guardado em cache do navegador. Caso contrário, o script será processado sempre que o usuário acessar uma página que precisa deste arquivo como estilo. Para isso, leia o post Cache de arquivos no navegador.

Uma observação é que o arquivo precisa ter extensão ".php" para ser processado pelo interpretador de PHP. Caso queira que os arquivos com extensão ".css" sejam processados, é necessário configurar o servidor para isso. No Apache, isso pode ser feito com a seguinte linha:

AddHandler php5-script .css

Mas como nem sempre sabemos se teremos a possibilidade de configurar o Apache adequadamente, a solução de usar extensão ".php" é mais portável.

Esta mesma ideia pode ser usada para gerar outros tipos de arquivos dinamicamente. Por exemplo, JavaScript dinâmico (tipo text/javascript) ou um TXT dinâmico (tipo text/plain).

0 comentários