Ir ao conteúdo

Criando seu Proprio Tiny-URL.

Boa noite a todos,

Ontem pela madrugada estava pensando no Twitter e que ele reduz urls grandes automaticamente para um sistema escolhidos por eles. Então, estava a pensar em como fazer o meu próprio sistema criação de urls pequenas (tiny url) e pesquisei um pouco no Google. Achei várias referências que utilizei como base para elaboração do meu e os links das mesmas você poderá encontrar no final deste post.

Primeiramente você deve criar uma tabela em seu banco de dados com as seguintes características:

# CREATE TABLE IF NOT EXISTS `urls` (
# `uid` int(11) NOT NULL auto_increment,
# `url` text default NULL,
# `unique_chars` varchar(25) BINARY NOT NULL,
# PRIMARY KEY (`uid`),
# UNIQUE KEY `unique_chars` (`unique_chars`)
# );

Este código foi pego do Abhise no seu post “Create your own tinyurl with php and mySQL” que foi minha maior referência, da mesma peguei várias funções mas realizei algumas alterações para melhor eficiência e também tradução para você. Como no código acima foi adicionado o ‘BINARY’ para o unique reconhecer diferença entre AAAA e aaaa, por exemplo.

O Abhise diz para criarmos tais e tais arquivos, eu particularmente, criei um arquivo de funções onde adicionei as diversas funções utilizadas e simplesmente chamei as mesmas nos seus respectivos arquivos.

—- Para ler o artigo inteiro acesse o link abaixo.

Inicialmente precisamos de uma função para conectar/desconectar do mysql e também adicionei algumas variáveis e “diretivas”

error_reporting(E_ALL);
$link;
$config;
function connect_db_lurl() {
global $link;
global $config;
$hostname = “localhost”;
$username = “USUARIO”;
$password = “SENHA”;
$dbname = “DATABASE”;
$link = mysql_connect($hostname, $username, $password); // Conecta ao mysql.
mysql_select_db($dbname) or die(“Unknown database!”); // Seleciona o Banco de dados.
$config[“domain”] = “http://seudominio.com”; // Define a configuração da URL inicial
}

function close_db_lurl() {
mysql_close(); // Fecha a conexão com o banco de dados
}

Segundo passo foi criar uma função para redirecionamento, ou seja, uma função que redirecionasse para URL original

function redirect($url) {
header(“Location:”.$url); // Redireciona para a url.
}

Logo em seguida utilizei a função já criada por Abhise para gerar a sequencia de caracteres. (Adicionei algumas letras que ele não estava utilizando elevando assim muito a quantidade de combinações possíveis)

function generate_chars() {
$num_chars = 6; // Tamanho que você deseja as strings
$i = 0;
$my_keys = “123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ”; // Caracteres que valem para formação de endereço
$keys_length = strlen($my_keys);
$url = “”;
while($i<$num_chars) { // Gera sequencia aleatoria $rand_num = mt_rand(1, $keys_length-1); $url .= $my_keys[$rand_num]; $i++; } return $url; }

Utilizamos também um método para verificar se a chave é única:

function isUnique($chars) {
global $link;
$q = “SELECT * FROM `urls` WHERE `unique_chars`='”.$chars.”‘”;
$r = mysql_query($q, $link); // Verifica se a chave é unica.
if( mysql_num_rows($r)>0 ) {
return false;
} else {
return true;
}
}

E outro para verificar se a URL já existe no banco de dados:

function isThere($url) {
global $link;
$q = “SELECT * FROM `urls` WHERE `url`='”.$url.”‘”;
$r = mysql_query($q); // Verifica se já existe a url
if(mysql_num_rows($r)>0) {
return true;
} else {
return false;
}
}

Por fim, a função para gerar as urls:

function create() {
global $link;
global $config;
$chars = generate_chars(); // Gera sequencia de caracteres.

while(!isUnique($chars)){ // Verifica se é unico, se não for gera denovo.
$chars = generate_chars();
}

$url = $_GET[“u”]; // Pega o endereço que está em ?u=endereço
$url = trim($url); // Retira espaços em branco do inicio e do fim
$url = mysql_real_escape_string($url);

if(!isThere($url)) { // Caso não exista o endereço no banco.
$q = “INSERT INTO `urls` (url, unique_chars) VALUES (‘”.$url.”‘, ‘”.$chars.”‘)”;
$r = mysql_query($q, $link); // Insere o endereço
if(mysql_affected_rows()) {
$q = “SELECT * FROM `urls` WHERE `url`='”.$url.”‘”;
$r = mysql_query($q);
$row = mysql_fetch_row($r);
echo $config[“domain”].”/”.$row[2]; // Imprime endereço para acesso da nova url
} else {
echo “Desculpe, problemas com o banco de dados.”;
}
} else { // Caso já exista
$q = “SELECT * FROM `urls` WHERE `url` = ‘”.$url.”‘”;
$r = mysql_query($q); // Seleciona endereço para URL
$row = mysql_fetch_row($r);
echo $config[“domain”].”/”.$row[2]; // Imprime endereço para acesso da url.
}
}

Olhando o código algum tempo depois resolvi criar outra função para Pegar o endereço:

function take_lurl($lurl) {
global $link;
$q = “SELECT url FROM `urls` WHERE `unique_chars` = ‘”.$lurl.”‘”;
$r = mysql_query($q, $link); // Pega endereço original para tal string.
if(mysql_num_rows($r)>0) {
$info = mysql_fetch_array($r);
$url = $info[“url”];
} else {
echo “Sorry, link not found!”;
}
return $url;
}

Criei o arquivo “functions-little-url.php” com os códigos anteriores e os demais arquivos dessa maneira:

index.php:

create.php:

Até aqui tranquilo, logo em seguida devemos adicionar o Mod_Rewrite no Apache e adicionar as seguintes linhas no .htaccess


RewriteEngine On
RewriteRule ^([1-9a-zA-Z]*)$ index.php\?u=$1 [L]

Eu fiz o meu dessa maneira, como foi descrito nas referências, realizando algumas modificações. Tudo funcionou bem.

Como eu utilizo o sistema wordpress e gostaria de utilizar o mesmo (que já usava mod_rewrite) junto dessa minha nova funcionalidade tive que pesquisar mais sobre este módulo para apache. Então caso você deseje utilizar este sistema junto ao seu sistema WordPress faça da seguinte maneira:


RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f # Verifica se a página acessada não é um arquivo real
RewriteCond %{REQUEST_FILENAME} !-d# Verifica se a página acessada não é um diretório
RewriteRule ^([A-Za-z0-9]{6})$ /lurl/index.php?u=$1 [L] # Caso coincida com a expressão regular redirecione para /lurl/index.php?u=$1 onde /lurl/ é o diretório que está os meus arquivos de tiny-url e [L] indica que é a ultima instrução a ser executada.

# Caso não feche com a parte em cima continua nas regras “padrões” do WordPress
RewriteCond %{REQUEST_FILENAME} !-f # Verifica se a página acessada não é um arquivo real
RewriteCond %{REQUEST_FILENAME} !-d# Verifica se a página acessada não é um diretório
RewriteRule . /index.php [L]

Para criar URLs acesse o endereço create.php?u=ENDEREÇO_DO_SITE
Para acessar URLs o arquivo index.php cuidara disso para você.

Você pode baixar estes arquivos de Como criar seu proprio sistema de TinyURL aqui.

Qualquer dúvida, sinta-se a vontade para entrar em contato comigo. E em breve estou pensando em disponibilizar esse “compressor” de URL como um serviço do meu blog. Lembrando que você não deve ter pastas com nomes do mesmo tamanho que o utilizado pelo L-Url.

Abraço a todos,
Matheus Bratfisch

PS: Eu tinha feito algo mais bonito, com Objetos e tudo mais, porém após ter feito os códigos e tentar testar descobri que o meu PHP não estava atualizado, então assim que eu atualizar o mesmo eu testo e posto as modificações para você.

Referências:
—- “Tiny Url”:
www.php.net
Wynia.org
htmlCenter
—- “Mod Rewrite”:
Apache Mod Rewrite

Publicado emAprendendoMySQLphp

509 Comentários

  1. Jamesdox Jamesdox

    Информация об обращении не передается третьим лицам, а детали лечения обсуждаются только с пациентом.
    Выяснить больше – kapelnica-ot-zapoya-srochno

  2. Vengo jugando como cinco meses en 888starz y para que mentir tenia dudas al principio, porque aqui en Espana te cansas de casinos que prometen mucho. Abrir la cuenta fue cosa de un rato minimo, correo y contrasena y ya esta, y el minimo para depositar esta en 1 euro, que para probar viene de lujo.

    De slots van sobrados — creo que pasan de unos 10.000 juegos de proveedores como Pragmatic Play, NetEnt, Play’n GO, Betsoft y Yggdrasil. Yo tiro mucho de Sweet Bonanza y Book of Dead, eso si tambien le he dado a cosas de Big Time Gaming. La pega es que encontrar un juego concreto es un lio cuando el catalogo es tan bestia.

    La zona en vivo esta llevada por Evolution y se nota la diferencia: ruletas con crupieres de verdad, Crazy Time que enganchan una barbaridad. El bono de bienvenida ronda el 100% hasta 300€ y unas 100 tiradas gratis, con un rollover de x35, que no es regalado pero tampoco un robo. Suele haber alguna promo sin deposito, conviene revisar lo que hay vigente desde 888starz download latest version antes de registrarte.

    Las retiradas va bastante fino. Retire hace poco por Skrill y me llego en menos de una hora. Con Visa se va a dos o tres dias, como en todos lados. Van con Neteller, cripto y ahi es donde vuela de verdad.

    Desde el movil funciona bien, tienen app para Android pero yo uso el navegador y me sobra. La atencion al cliente esta en espanol, me atendieron rapido cuando pregunte por el KYC. Licencia de Curazao, que no es la DGOJ y hay que saberlo antes de entrar. Por ahora no me ha fallado, pero ojo con el rollover de las promos.

  3. Здорова, народ Муж просто потерял себя Соседи стучат в стену В больницу тащить страшно Короче, врачи приехали и поставили систему — вывод из запоя на дому недорого с гарантией Поставили капельницу с детоксикационным раствором В общем, вся инфа по ссылке — вывод из запоя на дому недорого вывод из запоя на дому недорого Вывод из запоя на дому — это реальный выход Перешлите тем кто в такой же ситуации

  4. Danielwharo Danielwharo

    В статье по вопросам здоровья мы рассматриваем актуальные проблемы, с которыми сталкивается общество. Обсуждаются заболевания, факторы риска и важные аспекты профилактики. Читатели получат полезные советы о том, как сохранить здоровье и улучшить качество жизни.
    Давай разберёмся досконально – наркологическая клиника «Трезвая жизнь»

  5. Danielwharo Danielwharo

    В данном обзоре представлены основные направления и тренды в области медицины. Мы обсудим актуальные проблемы здравоохранения, свежие открытия и новые подходы, которые меняют представление о лечении и профилактике заболеваний. Эта информация будет полезна как специалистам, так и широкой публике.
    Не упусти шанс – http://www.zapoy-voronezh.ru

  6. Слушайте кто знает Отец не выходит из штопора Родственники не знают что делать Таблетки не помогают Короче, единственное что вытащило из запоя — выведение из запоя под контролем врачей Положили в палату В общем, вся инфа по ссылке — вывод из запоя с выездом вывод из запоя с выездом Звоните прямо сейчас Перешлите тем кто в такой же ситуации

  7. DavidAnope DavidAnope

    Этот документ охватывает важные аспекты медицинской науки, сосредотачиваясь на ключевых вопросах, касающихся здоровья населения. Мы рассматриваем свежие исследования, клинические рекомендации и лучшие практики, которые помогут улучшить качество лечения и профилактики заболеваний. Читатели получат возможность углубиться в различные медицинские дисциплины.
    Ознакомиться с деталями – аффективный психоз лечение

  8. طيب بقالي تقريبًا نص سنة بجرب على المنصة دي وقلت أكتب تجربتي بما إن الموضوع بيتكرر هنا. أكتر حاجة عجبتني إن عدد الألعاب كبير بشكل مش طبيعي — أكتر من 6000 لعبة بالتقريب، ومش كلها زبالة زي بعض المواقع. Pragmatic Play موجودة بقوة ووطبعًا NetEnt وPlay’n GO.

    أنا شخصيًا بقعد أطحن في سويت بونانزا، وزميلي عايش على Book of Dead. اللي جربته الفترة اللي فاتت كان حاجات Microgaming ومش بطالة. لكن اللي مش عاجبني إن السيرش مش دقيق لما تدور على لعبة بالاسم.

    جزئية الـlive اللي بيشد فعلًا — إيفوليوشن شغالة عليه، ناس حقيقية قدامك والستريم مستقر حتى لما النت بيبوظ شوية. كريزي تايم بالذات مسلية جدًا، وكمان فيه روليت وبلاك جاك عربي وده مريح. بالنسبة لـ البونص بيكون مضاعفة أول شحن و 150 لفة مجانية مش كلها مرة واحدة، وشرط التدوير 35x وده معقول. تقدر تشوف آخر العروض والأكواد من تنزيل برنامج 888starz قبل ما تودع أي حاجة لأن الأرقام بتتبدل كل فترة.

    إنشاء الحساب أخد مني دقيقتين، والحد الأدنى للإيداع بسيط — مبلغ رمزي. طرق الشحن فيه كروت البنوك، Skrill وNeteller، وعملات رقمية وده اللي بستخدمه أنا. السحبة اللي فاتت جالي في نفس اليوم بالـبيتكوين، إنما بالكارت بياخد وقت أطول.

    على الموبايل الوضع كويس — تنزيل التطبيق من الموقع الرسمي وده طبيعي في مواقع الرهان. النسخة الجديدة بينزل تلقائي ومفيش لخبطة. خدمة العملاء شات مباشر 24 ساعة بس الرد العربي بياخد وقت أطول شوية. الترخيص من كوراساو ومعروف إنه مش صارم زي مالطا، فاعتبرها نصيحة: العب بفلوس تقدر تخسرها.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *