Compactador de URL utilizando manipulação de diretórios do Linux com PHP

Esse artigo mostra com criar um compactador de URL como a exemplo dos sites migre.me, bit.ly, tinyurl.com etc para utilização em sites como o Twitter. Utiliza a linguagem de programação PHP para fazer a manipulação de diretórios dentro do filesystem do servidor web que fornecerá o serviço.

[ Hits: 11.459 ]

Por: Ricardo Ferreira Martins em 16/10/2010


Recebendo os dados do usuário, gerando o novo link e retornando as novas informações geradas



Agora a segunda parte, o código do compactador de URL "geraurl.php".

geraurl.php:

<?php
function tiraHTTP($subject){
   preg_match('/http\:\/\/(.*)/',$subject, $matches);
   if ($matches) return $matches[1];  
   else return $subject;
}
$url = tiraHTTP($_POST["URL"]);
$rand = substr(rand(),0,4);
mkdir($rand, 0777);
$new_url = 'http://www.seu_site.com.br/' . $rand;
$fp = fopen($rand.'/index.php', 'w+');

$html = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>twitter.com/bambuzal</title>
<META HTTP-EQUIV=REFRESH CONTENT="1;URL=http://'.$url.'">
</head>
<body>
</body>
</html>';

fwrite($fp,$html);
fclose($fp);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Twitter.com/bambuzal</title>
<META HTTP-EQUIV=REFRESH CONTENT="1;URL='index.php?u=<?=$url;?>&nl=<?=$new_url;?>'">
</head>
<body>
</body>
</html>

Detalhando:

A função tiraHTTP() somente retira a string "http://" do link passado pelo usuário. Isso porque ele pode ou não digitar o link com "http://". Para termos um padrão foi decidido retirar a string do link.

A variável $rand recebe o retorno da função rand(), que é um número gerado aleatoriamente limitado a 4 dígitos pela função substr().

A função mkdir() cria um diretório com o nome armazenado a variável $rand, sendo que o segundo argumento da função é a permissão do DIR.

A função fopen() com o argumento "w+" abre um ponteiro de escrita para o arquivo denominado no primeiro parâmetro.

A fwrite grava o conteúdo da variável $html no arquivo aberto para escrita, onde constará o link antigo. Nada mais é que uma página de redirecionamento através da tag META.

Após a criação do arquivo e diretório executará o HTML abaixo, que fará o redirecionamento para a primeira página, a index.php, que agora sim receberá variáveis via GET e as exibirão na tela. No caso, são a URL antiga e a atual.

Espero tem contribuído com o conhecimento compartilhado.

Página anterior    

Páginas do artigo
   1. Criando um formulário em HTML para enviar da URL ao sistema compactador de URL
   2. Recebendo os dados do usuário, gerando o novo link e retornando as novas informações geradas
Outros artigos deste autor

Acessando o Twitter de 5 formas: protocolo HTTP, cURL, classe HttpRequest (PHP), função http_post_fields() do PHP ou PHP+libcurl

Leitura recomendada

Symfony Framework - Introdução

Google Chart: Criando gráficos dinâmicos em minutos

Trabalhando com datas em PHP

Tags automáticas em URLs com a classe urlmatch da PHP

Formantando nomes com caracteres especiais em PHP

  
Comentários
[1] Comentário enviado por mtarroyo em 10/11/2010 - 09:11h

Legal o artigo, acredito que seria uma boa também verificar se o diretório gerado através da função rand() já existe no servidor. Eu sei que pode ser bem difícil de acontecer, mas, em um sistema com um grande número de usuários, é bom sempre garantir.

$rand = substr(rand(), 0, 4);

if(is_dir($rand) === TRUE)
{
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">';
echo '<html>';
echo '<head>';
echo '<title>Twitter.com/bambuzal</title>';
echo '<META HTTP-EQUIV=REFRESH CONTENT="1;URL=geraurl.php?URL=<?echo $_POST['URL']; ?>">';
echo '</head>';
echo '<body>';
echo '</body>';
echo '</html>';

die();
}

Dessa forma, caso o diretório gerado ja exista, o script geraurl.php é reiniciado. Da para deixar o script mais prático que isso, mas echo que assim da para entender legal o que eu quis dizer.

Abraços!


Contribuir com comentário