Un raccourcisseur d'URL
Aujourd’hui je me suis mis en tête de me faire un script php me permettant de raccourcir mes url.
Pourquoi ? Parce-que …
Parce-que j’avais besoin d’un raccourcisseur d’url qui n’espionne pas les liens que je souhaite raccourcir.
Voici le commentaire de début de mon script :
/***************************/ /* Auteur : Purexo : http://twitter.com/Purexo_ /* /* Ceci est un raccourcisseur d'url /* Il fonctionne en 3 temps : /* 1- l'utilisateur rentre son lien à raccourcir /* 2- le lien est rentré dans la base de donné, la page fournit à l'utilisateur son lien /* 3- le lien fourni contient une variable a contenant l'id du lien demandé une requete sql fourni le lien grace à l'id puis la page redirige vers le lien /* /* Conseil d'utilisation : /* - utiliser ce script sous le non de index.php dans la racine du serveur qui lui seras "dédié" /* - faire un peu d'urlrewriting afin que http://hostname/id redirige vers http://hostname/index.php?a=id (afin d'avoir le lien le plus court possible) /* - avoir un nom de domaine très court genre li.fr /* /* Pourquoi avoir fait mon raccourcisseur d'url ? : /* - Pour m'entrainer /* - j'en souhaitais un le plus minimaliste possible : pas de pub, pas de temps d'attente, pas de vérification d'url (ce qui est à la fois un avantage et un désavantage) /* /* Avantage et désavantage : /* le script ne vérifie rien, n'altère rien : il exécute, j'imagine que par conséquent il y a de grosse faille de sécurité, mais cela me permet d'entrer des liens /* auto-destructible via zerobin sans que celui-ci ne soit analysé et donc détruit par une machine automatiquement. /* /* idée d'amélioration : /* - fournir le lien avec l'id en hexadécimal. (toujours pour grappiller un peu de place) /* - le remettre en décimal pour exécuter la requête sql avec redirection ****************************/
Je pense qu’après cela il n’y à pas grand chose à rajouter hormis le fait que j’utilise le SGBD mysql pour faire tourner ma BDD.
Voici mes sources :
short.php :
<?php
/***************************/
/* Auteur : Purexo : http://twitter.com/Purexo_
/*
/* Ceci est un raccourcisseur d'url
/* Il fonctionne en 3 temps :
/* 1- l'utilisateur rentre son lien à raccourcir
/* 2- le lien est rentré dans la base de donné, la page fournit à l'utilisateur son lien
/* 3- le lien fourni contient une variable a contenant l'id du lien demandé une requete sql fourni le lien grace à l'id puis la page redirige vers le lien
/*
/* Conseil d'utilisation :
/* - utiliser ce script sous le non de index.php dans la racine du serveur qui lui seras "dédié"
/* - faire un peu d'urlrewriting afin que http://hostname/id redirige vers http://hostname/index.php?a=id (afin d'avoir le lien le plus court possible)
/* - avoir un nom de domaine très court genre li.fr
/*
/* Pourquoi avoir fait mon raccourcisseur d'url ? :
/* - Pour m'entrainer
/* - j'en souhaitais un le plus minimaliste possible : pas de pub, pas de temps d'attente, pas de vérification d'url (ce qui est à la fois un avantage et un désavantage)
/* Je pense rajouter une regex pour tester si c'est un lien, mais c'est tout (en meme temps si c'est pas un lien qui est fourni il n'y a aucun interet, que ce sois pour l'user, ou pour son stockage dans la BDD)
/*
/* Avantage et désavantage :
/* le script ne vérifie rien, n'altère rien : il exécute, j'imagine que par conséquent il y a de grosse faille de sécurité, mais cela me permet d'entrer des liens
/* auto-destructible via zerobin sans que celui-ci ne soit analysé et donc détruit par une machine automatiquement.
/*
/* idée d'amélioration :
/* - fournir le lien avec l'id en hexadécimal. (toujours pour grappiller un peu de place)
/* - le remettre en décimal pour exécuter la requête sql avec redirection
****************************/
$mysqli = new mysqli("localhost", "root", "********", "shorter"); //connection à la bdd (shorter c'est le nom de la base de donné')
if(isset($_GET["a"])){
$req = "SELECT link FROM links WHERE id = " . $_GET['a'] ;
$res = $mysqli->query($req);
$row = $res->fetch_assoc();
$link = $row['link'];
//echo $link;
$test = header('Location: '.$link);
//echo $test;
}
?>
<!DOCTYPE html>
<html>
<head>
<title> Raccourcisseur d'url </title>
</head>
<body>
<center>
<h1> Bienvenue sur ce racoursisseur d'url </h1>
<?php
if(isset($_POST['lien'])){
$req = 'INSERT INTO links ( link ) VALUES ("'.$_POST['lien'].'")';
$mysqli->query($req);
$link = "https://purexo.tk/short.php?a=".$mysqli->insert_id; // ligne à changer en fonction de votre hébergement : http://hostname/nomduscript.php?a=
echo '<p><a href="'.$link.'">Votre Lien</a></p>';
}
?>
<form method="post" action="short.php"> <!-- nom de votre fichier.php -->
<p>Votre lien à raccourcir</p>
<textarea name="lien">https://purexo.tk/</textarea><br />
<input type="submit" value="Envoyer" />
</form>
</center>
</body>
</html>
shorter.sql :
CREATE DATABASE shorter; USE shorter; CREATE TABLE links ( id bigint unsigned NOT NULL AUTO_INCREMENT, link text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (id) );
Si vous avez des questions, des conseils (genre faille de sécurité) n’hésitez pas ^^ !
En attendant vous pouvez tester ça ici : short.php
EDIT : j’ai maintenant un nom de domaine dédié pour ce service, le code source est dispo sur github et j’ai finalement opté pour SQLite3