CodeIgniter: Use a Global $_SERVER no config para ganhar dinamismo com subdomínios.

2

Posted by flaviosilveira | Posted in CodeIgniter, Php, Programação em geral | Posted on 26-07-2009

Cenário:

Você compra o domínio principal, www.site.com.br. E você vai ter duas versões desse site, uma para cada cliente, que vai usar todas as regras de negócio iguais. A única diferença será o layout. Os clientes pediram os subdomínios branco.site.com.br e preto.site.com.br.

Você pode fazer duas cópias do site em pastas diferentes, mas levando em consideração que eles tem o mesmo CORE, isso não é muito inteligente. Pense se você tiver que fazer uma atualização, você vai ter de mexer em ambos os projetos.

Porque não fazer os subdomínios como links simbólicos para uma mesma pasta? De lá você pode fazer uma verificação. Se for um site, pega o layout branco, se for o outro pega o layout preto.

Problema:

No Codeigniter você define a URL principal do seu projeto nos arquivos de configuração, na variável $config['base_url']. Você não vai ter como colocar os subdomínios lá. O que fazer?

Solução:
Usar a Global $_SERVER.

Essa Global traz informações como o host que você está acessando, o email do administrador da máquina, o software usado, a configuração do TimeOut entre outras.

Para que você mesmo visualize tudo isso faça o seguinte. Abra o seu config.php do CodeIgniter e logo acima de onde está setado a variável $config['base_url'] de um print_r, como abaixo:


|--------------------------------------------------------------------------
| Base Site URL
|--------------------------------------------------------------------------
|
| URL to your CodeIgniter root. Typically this will be your base URL,
| WITH a trailing slash:
|
|       http://example.com/
|
*
print_r($_SERVER);
die;
$config['base_url']     = "http://www.site.com.br/";


Veja em seu browser todas as opções que você tem nessa global.

Dê uma atenção na primeira opção que vêm no array, o HTTP_HOST. Ele traz o endereço primário que você está acessando. É o que você precisa para setar seu config de acordo com a url que seu visitante acessar.

Dando um print apenas nesse cara,


|--------------------------------------------------------------------------
| Base Site URL
|--------------------------------------------------------------------------
|
| URL to your CodeIgniter root. Typically this will be your base URL,
| WITH a trailing slash:
|
|       http://example.com/
|
*
print_r($_SERVER['HTTP_HOST']);
die;
$config['base_url']     = "http://www.site.com.br/";

ele retorna o seu subdomínio.

Agora é só fazer uma adaptação.


|--------------------------------------------------------------------------
| Base Site URL
|--------------------------------------------------------------------------
|
| URL to your CodeIgniter root. Typically this will be your base URL,
| WITH a trailing slash:
|
|       http://example.com/
|
*

$config['base_url']     = "http://" . $_SERVER['HTTP_HOST'];

Seja lá qual subdomínio você acessar, ele vai setar como base_url para você.

Caso você não use subdomínios, esse artifício pode ser usado para você deixar o base_url automatizado para seus projetos.

Espero que tenham curtido a idéia.
Qualquer dúvida só mandar.
Abraços!!

Be Sociable, Share!

Comments (2)

Belo post, simples e útil, no tempo em que eu usava o CI nunca pensei nisso, uma grande sacada!
Sempre tive uma duvída em relação a esse base_url, ele não deveria ser o caminho absoluto para as pastas de assets??

Valeu e Parabénsss!

Muito boa dica, numa linguagem muito simples e facil de se entender, como deve ser todas as dicas e tutoriais. Parabens

Post a comment