Présentation
Les services gratuits de gestion d'URL raccourcies sont légion
: TinyURL,
ShortURL,
SnipURL
ou MakeAShorterLink
sont très utilisés dès que l'utilisateur
souhaite transmettre une URL longue ou compliquée sans
crainte de la voir coupée par le logiciel de messagerie,
ou mal retranscrite.
Un de leurs défauts, cela étant, est que vous
êtes dépendant de leurs services pour la bonne
redirection de vos liens. Nous vous proposons donc ici un
script vous permettant d'héberger sur votre propre
site vos liens courts.
Le script est facilement modifiable pour ajouter une section
d'administration afin d'effacer ou modifier des liens stockés...
Le code
<?php
$conn = mysql_connect("localhost", "root", "")
or die("Impossible de se connecter");
$db = mysql_select_db("test", $conn)
or die(mysql_error());
$table = "petiturl";
function enregistrer($url)
{
global $table;
if ( !ereg('^(http|https|ftp)\://([a-zA-Z0-9\.\-]+(\:
[a-zA-Z0-9\.&%\$\-]+)*@)*((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-]
{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]
{1}[09]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|
[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4]
[0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|localhost|
([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.
(com|edu|gov|int|mil|net|org|biz|arpa|info|name|
pro|aero|coop|museum|[a-zA-Z]{2}))(\:[0-9]+)*(/($|
[a-zA-Z0-9\.\,\?\'\\\+&%\$#\=~_\-]+))*$', $url) )
{
?>Cet URL n'est pas valide.<?
}
else
{
$req = "INSERT INTO $table (id, url)
";
$req .= "VALUES ('', '$url');";
if (mysql_query($req))
{
$adresse = "http://" .
$_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']
. "?id=" . mysql_insert_id();
echo "Votre petitURL est
:<pre><a href='$adresse'>$adresse</a></pre>";
}
else
{
?>Raté!<?
}
}
}
function renvoyer($num)
{
global $table;
$req = "SELECT * FROM $table WHERE id = '$num';";
$res = mysql_query($req)
or die("Query failed");
if (mysql_num_rows($res) == 0)
{
?>Cet ID ne se trouve pas dans notre
base.<?
}
else
{
header("Location: " . mysql_result($res,
0, "url"));
}
}
function affichage()
{
if ( (isset($_REQUEST['creer']) && $_REQUEST['creer']
== 'oui')
&& (isset($_REQUEST['url']) && !empty($_REQUEST['url']) )
)
{
enregistrer($_REQUEST['url']);
}
elseif ( (isset($_REQUEST['id']) && !empty($_REQUEST['id'])
) )
{
renvoyer($_REQUEST['id']);
}
else
{
?>
<form action="<?=$_SERVER['PHP_SELF'];?>" method="GPOST">
<input type="hidden" name="creer" value="oui">
URL: <input type="text" name="url" value="http://">
<input type="submit" name="action" value="Réduire">
</form>
<?php
}
}
?>
<html>
<head>
<title>petitURL</title>
</head>
<body>
<?php affichage(); ?>
</body>
</html>
Quelques
explications
Notez que l'expression régulière n'est pas de
notre cru, mais du site RegExLib.com.
Nous avons simplifié au maximum : la table comprend
deux champs : id et url
:
CREATE TABLE `tinyurl` (
`id` int(11) NOT NULL auto_increment,
`url` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`)
)
|
Forum |
|
Réagissez
dans les forums
de JDN Développeurs
|
L'id sert donc à la
fois de spécification de l'URL, et à trouver
l'URL dans la base. L'URL récupérée depuis
la base de donnée modifie aussitôt la page visualisée
par l'utilisation de la fonction header().
Pour parfaire la chose, on pourrait créer un fichier
.htaccess renvoyant les URL
du type http://serveur/url/53
vers http://serveur/dossier/ptiturl/index.php?id=53...
|