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

271 Comentários

  1. Эта обзорная заметка содержит ключевые моменты и факты по актуальным вопросам. Она поможет читателям быстро ориентироваться в теме и узнать о самых важных аспектах сегодня. Получите краткий курс по современной информации и оставайтесь в курсе событий!
    Получить дополнительные сведения – https://vivod-iz-zapoya-2.ru/

  2. В этой информационной статье вы найдете интересное содержание, которое поможет вам расширить свои знания. Мы предлагаем увлекательный подход и уникальные взгляды на обсуждаемые темы, побуждая пользователей к активному мышлению и критическому анализу!
    Подробнее тут – https://vivod-iz-zapoya-2.ru/

  3. ThomasHal ThomasHal

    После алкоголя в организме накапливаются токсичные продукты распада, нарушается водно-солевой баланс и страдает нервная система, что особенно выражено после запоя или при алкоголизме. Это проявляется головной болью, слабостью, тошнотой и нарушением сна. Капельница помогает ускорить процессы очищения и восстановить внутренние системы, обеспечивая более быстрое облегчение состояния и помогая человеку выйти из состояния запоев.
    Получить дополнительную информацию – kapelnicza-ot-pokhmelya-voronezh-8.ru/

  4. Carlosalink Carlosalink

    Капельница от похмелья в Нижнем Новгороде: снятие симптомов похмелья, восстановление и поддержка под наблюдением врачей в наркологической клинике «Похмельная служба»
    Разобраться лучше – http://www.domen.ru

  5. DavidMoova DavidMoova

    Алкогольная интоксикация оказывает серьёзное влияние на организм, вызывая головную боль, тошноту, слабость и головокружение. Капельница помогает организму быстро избавиться от продуктов распада алкоголя, восстановить нормальное функционирование органов и минимизировать последствия для здоровья. Важно, что мы обеспечиваем полное наблюдение врача на протяжении всей процедуры, что помогает гарантировать безопасность пациента и максимальную эффективность лечения.
    Выяснить больше – капельница от похмелья в екатеринбурге

  6. CharlesKax CharlesKax

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

  7. Richardexelo Richardexelo

    Непрерывный мониторинг витальных показателей — ключевое отличие стационарного формата, обеспечивающее безопасную детоксикацию. В палатах клиники «Элегия Мед» установлены системы отслеживания частоты пульса, сатурации, температуры и артериального давления, данные с которых автоматически передаются в электронную медицинскую карту. Медицинский персонал дежурит круглосуточно, что обеспечивает мгновенную реакцию на ухудшение состояния: коррекцию инфузионной терапии, введение симптоматических препаратов, привлечение смежных специалистов при необходимости. Такая организация процесса исключает хаотичное назначение средств, предотвращает полипрагмазию и гарантирует, что каждый этап детоксикации проходит под строгим клиническим контролем. При необходимости применяются дополнительные методы очищения крови, включая плазмаферез, который эффективно помогает вывести стойкие токсины и метаболиты, не удаляемые стандартной инфузионной терапией.
    Детальнее – вывод из запоя в стационаре клиника санкт-петербург

  8. DonaldAbank DonaldAbank

    Наркологическая помощь — это комплекс медицинских мероприятий, направленных на стабилизацию состояния пациента при алкогольной или наркотической интоксикации, а также при абстинентном синдроме. В наркологической клинике «Частный медик 24» в Нижнем Новгороде помощь оказывается с учётом текущего состояния пациента, без избыточных вмешательств и с чёткой ориентацией на клинические показатели. Выезд нарколога позволяет начать лечение в первые часы ухудшения самочувствия, что снижает риски осложнений и облегчает восстановление.
    Изучить вопрос глубже – наркологическая помощь

  9. Timothyunusa Timothyunusa

    Вывод из запоя на дому в Санкт-Петербурге с анонимным выездом врача, снятием интоксикации и поддержкой в наркологической клинике «Частный медик 24»
    Подробнее тут – нарколог на дом вывод из запоя

  10. DonaldRix DonaldRix

    Процедура начинается с осмотра пациента. Врач оценивает основные показатели, включая давление и пульс, а также выраженность симптомов. После этого формируется состав капельницы и определяется тактика лечения, что позволяет эффективно провести вывод из запоя.
    Подробнее – капельница от похмелья вызов на дом воронеж

  11. BrandonSiz BrandonSiz

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

  12. Brianmeand Brianmeand

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

  13. Co wyróżnia Slottica na tle innych stron podobnych do Kasyno Total? Lobby gier stale rośnie dzięki współpracy z uznanymi studiami developerskimi, takimi jak Maskot Gaming, BGaming, Play’n Go, Gamzix, NetEnt oraz Playson. Dzięki temu gracze mają dostęp zarówno do klasycznych automatów, jak i nowoczesnych slotów z rozbudowaną grafiką i dodatkowymi funkcjami bonusowymi.

Deixe um comentário

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