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

241 Comentários

  1. Jamessmami Jamessmami

    Interested in UFC? https://ufc-white-house.com unique mixed martial arts tournament will take place on June 14, 2026, in Washington, D.C., on the South Lawn of the White House. It will be the first professional sporting event in history to be held directly on the grounds of the U.S. presidential residence.

  2. Такой подход позволяет достичь устойчивого результата без срывов и рецидивов. Пациенты получают помощь не только на уровне физиологии, но и на уровне личностных изменений, что делает лечение глубоким и эффективным.
    Подробнее тут – http://narcologicheskaya-clinika-v-rnd19.ru/

  3. MorrisVox MorrisVox

    Каждый элемент программы направлен на создание комплексного подхода к лечению зависимости, обеспечивая помощь не только на физическом, но и на эмоциональном уровне. Индивидуальная программа реабилитации позволяет выстроить эффективную терапию, которая соответствует конкретным потребностям пациента.
    Подробнее – reabilitacziya-alkogolikov-moskva.ru/

  4. Лечение алкоголизма в Сергиевом Посаде важно рассматривать не как разовую «чистку» или временный перерыв, а как последовательный маршрут. Самый уязвимый период — первые 24–72 часа после прекращения употребления: днём может стать легче, но к вечеру и ночью волной возвращаются тревога и бессонница, усиливается внутреннее напряжение, появляются телесные симптомы. В этот момент человек чаще всего срывается, потому что ему кажется, что «иначе не выдержу». Поэтому качественная помощь строится так, чтобы пациент прошёл вечер и ночь безопасно, с понятными ориентирами и медицинской поддержкой, а затем перешёл к восстановлению и профилактике рецидива.
    Углубиться в тему – медицина лечение алкоголизма

  5. Специалист осуществляет первоначальный осмотр, измеряет ключевые показатели: артериальное давление, пульс, сатурацию кислорода в крови, выявляет степень интоксикации и тяжесть симптомов.
    Изучить вопрос глубже – вызов нарколога на дом

  6. Michaelcix Michaelcix

    Не стоит медлить с вызовом врача-нарколога, если у человека проявляются тревожные признаки ухудшения состояния. Среди наиболее серьезных симптомов, требующих немедленного вмешательства врача, можно выделить продолжительный запой (более двух дней подряд), частую рвоту, невыносимую головную боль, выраженный тремор рук и тела, повышение артериального давления, нарушение ритма сердца, а также психические нарушения, включая тревогу, галлюцинации и бессонницу. Чем раньше пациент обратится за профессиональной помощью, тем выше шансы избежать серьезных осложнений и быстро вернуться к нормальной жизни.
    Получить дополнительную информацию – https://vyvod-iz-zapoya-novosibirsk0.ru/vyvod-iz-zapoya-czena-novosibirsk/

  7. KevinNER KevinNER

    Запой сопровождается быстрым накоплением токсинов, что может привести к нарушению работы сердца, печени и почек. Использование капельничного метода позволяет оперативно ввести современные препараты для детоксикации, что способствует быстрому восстановлению обменных процессов и нормализации работы внутренних органов. Оперативное лечение на дому особенно актуально, когда каждая минута имеет значение для спасения здоровья.
    Ознакомиться с деталями – https://kapelnica-ot-zapoya-tyumen0.ru/postavit-kapelniczu-ot-zapoya-tyumen/

  8. Michaelvep Michaelvep

    Нарколог на дом в Ростове-на-Дону рассматривается как специализированная форма оказания медицинской помощи пациентам с зависимостями вне стационара. В клинике «Чистый Баланс» выезд врача организуется круглосуточно, что позволяет обеспечить своевременное вмешательство при ухудшении состояния в любое время суток. Нарколог на дом в Ростове-на-Дону востребован в ситуациях, когда пациент не готов или не может обратиться в медицинское учреждение, а промедление с лечением повышает риск осложнений. Такой формат помощи требует строгого соблюдения клинических протоколов и высокой квалификации специалистов.
    Углубиться в тему – narkolog-na-dom-v-rnd19.ru/

  9. Такой подход позволяет наркологической клинике в Ростове-на-Дону выстраивать лечение в безопасных и психологически комфортных условиях.
    Получить дополнительные сведения – http://narkologicheskaya-klinika-v-rostove19.ru

  10. Williammit Williammit

    После диагностики начинается активная фаза медикаментозного вмешательства. Препараты вводятся капельничным методом, что способствует быстрому снижению уровня токсинов в крови, нормализации обменных процессов и стабилизации работы таких органов, как печень, почки и сердце.
    Исследовать вопрос подробнее – https://vyvod-iz-zapoya-murmansk00.ru/vyvod-iz-zapoya-czena-murmansk/

  11. PhillipSmons PhillipSmons

    На данном этапе врач уточняет, как долго продолжается запой, какой тип алкоголя употребляется и имеются ли сопутствующие заболевания. Детальный анализ клинических данных помогает подобрать оптимальные методы детоксикации и минимизировать риск осложнений.
    Узнать больше – вывод из запоя

  12. Danielwhads Danielwhads

    В «Южном МедКонтроле» лечение зависимостей строится поэтапно, с постепенным восстановлением физиологических функций и эмоциональной устойчивости. Врачи используют современные методы детоксикации, фармакотерапию и психотерапию, которые действуют комплексно. Каждый этап направлен на достижение конкретного результата: очищение организма, снятие симптомов абстиненции, стабилизацию состояния и профилактику срывов.
    Узнать больше – вывод наркологическая клиника

  13. Помощь при зависимостях в клинике «Южный Вектор» строится по принципу поэтапности, что соответствует современным медицинским представлениям. Наркологическая клиника в Ростове-на-Дону применяет методы, направленные на снижение выраженности синдромов отмены и восстановление функций органов. Клинические решения принимаются на основе данных обследования и наблюдения, что обеспечивает индивидуализацию терапии без отхода от стандартов.
    Изучить вопрос глубже – http://narkologicheskaya-klinika-v-rnd19.ru/

  14. qwfzmvpad qwfzmvpad

    The first thing you should do when you establish an online casino that gives you access to the live casino titles offered by Stakelogic Live is to check the bonuses and promotions offered. Sometimes you will find that the online casino is offering a live casino specific bonus or a bonus that will allow you to use live casino games alongside slots and other games. In this review, I’ll explain the two ways to play Super Stake Roulette, offer some insight into playing strategies, and compare them with the other multiplier roulette games. Stakelogic casino bonuses are designed to give more enjoyment to players while playing Stakelogic games. There are many types of bonuses available, and you can choose the one that best fits your playing style. Check out below some of the bonuses for Stakelogic casinos.
    https://chatapridedovke.sk/black-label-casino-uk-review-what-you-need-to-know/
    Having played multiple crash games, I can confirm that Astronaut shares the same fundamental mechanics as other titles like Aviator, Crash, and Spaceman. The primary differences lie in the visual theme (astronaut vs. airplane, rocket, etc.), interface design, and sometimes minor variations in betting options. The underlying mathematical model remains essentially the same across most crash games. Astronaut by 100HP is a licensed, RNG-certified crash game regulated under Curacao eGaming (#8048 JAZ), ensuring fairness and legitimacy, and it undergoes regular audits by iTech Labs to guarantee random outcomes, meaning it is a real, provably fair game offered by reputable online casinos. Our hours are subject to change on a daily basis based on special events, capacity and exhibition closures. Please check our Visitor Information page.

  15. eyixjzjoq eyixjzjoq

    Är du nyfiken på att testa Power of Olympus? Det är enkelt att komma igång! När spelet öppnas visas en 7×7 spelplan där du kan satsa mellan 2 kr och 200 kr per spinn. Det finns ofta möjlighet att spela gratisspel på Gates of Olympus hos många casinon, oavsett om du spelar Gates of Olympus i Sverige eller inte. Detta gör att du har möjlighet att spela på sloten utan att behöva riskera ditt eget saldo när du befinner dig i inlärningsprocessen. Estimert lesetid: 9 minutter FunBet Casino (2025) – Anmeldelse av spill, betalinger og sikkerhet FunBet Casino er en nykommer i det norske markedet, lansert i 2024. Plattformen har høstet oppmerksomhet for sitt enorme spillutvalg, kryptovennlige profil og attraktive bonuser.… WE SHALL NOT EVEN KNOW THAT WE HAVE MET, YET MEET WE SHALL. AND PASS AND MEET AGAIN. WHERE DEAD MEN MEET; ON THE LIPS OF LIVING MEN
    https://wordappeal.com/casino-friday-cash-games-en-recension-for-spelare-i-sverige-2/
    Quest Gonzo är en kaskadapparat. Hjulen snurrar inte och spelsymbolerna faller uppifrån. Den vinnande kombinationen tas bort, istället för de försvunna ikonerna läggs de övre tills det inte finns något vinnande ögonblick. Multiplikatorn ökar för varje vinnande kombination. Om alla multiplikationssteg passeras uppdateras alla 15 symbolerna och processen upprepas. Spelet har 5 rullar med tre rader med 20 aktiva rader. Antalet rader är fast. Denna videoslot imponerar med vacker grafik, fantastiska ljudeffekter och ett äventyrligt tema. Dessutom väntar även specialfunktioner som kan resultera i riktigt stora vinster. NetEnt har själva sagt att varje spelautomat de skapar är ett äventyr, och att kanske inget spel demonstrerar det så bra som Gonzo’s Quest. Med tanke på hur många bra spel NetEnt släppt genom åren säger detta påstående en hel del om spelet!

Deixe um comentário

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