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:
ob_start(); //Inicia Buffer de saida include("functions-little-url.php"); connect_db_lurl(); $lurl = $_GET["u"]; //Sequencia de caracteres $url = take_lurl($lurl); redirect($url); close_db_lurl(); ob_end_flush(); // Fecha buffer de saida ?>
create.php:
include("functions-little-url.php"); connect_db_lurl(); create(); close_db_lurl(); ?>
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
Все самое свежее здесь: https://kapremontufa.ru
Только лучшие материалы: https://remontokonufa.ru
Больше на нашем сайте: https://okna-domostroy.ru
monopoly big bazaar live result monopoly big bazaar live result .
casino scores monopoly big baller today live casino scores monopoly big baller today live .
Hey there, You have done a fantastic job. I?ll definitely digg it and personally recommend to my friends. I am confident they will be benefited from this web site.
monopoly live score india https://monopoly-live-in.com/ .
monopoly big baller live score monopoly big baller live score .
khelo24bet monopoly big baller results today live khelo24bet monopoly big baller results today live .
послуги ремонту квартир ремонт квартир ключ ціна
послуги ремонту квартир ремонт квартир недорого
monopoly live casinos monopoly live casinos .
Can I just say what a relief to find somebody who really knows what theyre speaking about on the internet. You positively know learn how to carry a problem to gentle and make it important. Extra individuals need to read this and understand this facet of the story. I cant believe youre not more fashionable since you definitely have the gift.
перевозка автомобилей дешево перевозка авто москва стоимость
Looking for the Best Drive School of Motoring? Get expert driving lessons at best driving school for affordable and quality driving instruction.
перевозка авто услуги перевозки машин
Things Worth Watching: שירותי נערות ליווי
Обновлено сегодня: https://spainslov.ru/site/word/word/%D0%91%D0%9E%D0%A1%D0%9E%D0%99
Bettors gain an advantage by accurately seeing what their bets could yield.
free bet calculator https://single-betcalculator.com/
free bet calculator single https://www.singlebet-calculator.uk .
double calculator https://single-bet-calculator-free.uk/bet-calculator/double/
With insights into expected winnings, bettors can better manage their stakes.
bet double https://single-betcalculator.uk/bet-calculator/double/
Wow, superb blog layout! How long have you been blogging for? you made blogging glance easy. The overall look of your website is wonderful, let alone the content!
Seks is breed beschikbaar op speciale platforms voor
volwassenen. Kies voor gegarandeerde bronnen voor veiligheid.
Here is my homepage – BUY VIAGRA ONLINE
санитарная служба дезинфекции сайт
crazy time deno https://crazy-time-stats.com/
crazy time starts crazy time starts.
crazy time stats https://crazy-time-gratis.com/
crazy time online casino https://crazy-time-stats.com/
Do you love excitement? https://jerseysbeststore.com/glossary offers premium pre-match and live sports betting, as well as a legal online casino. Try your luck on modern slots, table games, or with live dealers. We guarantee complete data security, fair results, and 24/7 player support.
лента стальная мягкая лента стальная гост цена
bitcoin video poker tips bitcoin video poker tips .
crazy time game crazy time game .
monopoly live casino https://monopoly-casino-in.com/
monopoly live game tracker monopoly live game tracker.
win bitcoin playing poker win bitcoin playing poker .
888starz.bet https://888starzuz4.com/
bitcoin poker spielen bitcoin poker spielen .
888strz https://888starzuz1.com/
рабочее зеркало 888starz https://888starzuz2.com/
Рекомендации по прохождению
секс игрушки купить
8 starz https://justpaste.me/2tgm1/
Nieuwste adult websites brengen innovatieve inhoud voor volwassen entertainment.
Ontdek gegarandeerde porno hubs voor een moderne ervaring.
Here is my web site BUY CONCERTA ONLINE
салон тату и пирсинга тату салон питер
салон татуировок тату https://taty-salon-spb.ru
888starz https://dronesimpro.com/stmt-blb-lkzynw-br-lntrnt-l-888starz-khdm-ry-fy-msr/
monopoly big brother https://monopolyy.live/
I was recommended this website by my cousin. I’m not sure whether this post is written by him as no one else know such detailed about my problem. You’re incredible! Thanks!
solana nft casino https://solcasinodeutschland.de/
bestes solana online casino https://solkryptocasino.de/