2009-08-24 6 views
0

Le site sur lequel je travaille veut générer ses propres URL raccourcies plutôt que de s'appuyer sur un tiers tel que tinyurl ou bit.ly.Raccourcissement d'URL: utilisation de l'inode comme nom abrégé?

De toute évidence, je pourrais garder un nombre de nouvelles URL en cours d'exécution car ils sont ajoutés au site et l'utiliser pour générer les URL courtes. Mais j'essaie d'éviter cela si possible, car il semble que beaucoup de travail juste pour faire fonctionner cette chose. Comme les choses qui ont besoin d'URL courtes sont tous de vrais fichiers physiques sur le serveur web, ma solution actuelle consiste à utiliser leurs numéros d'inodes car ceux-ci sont déjà générés pour moi prêts à l'emploi et garantis d'être uniques.

function short_name($file) { 
    $ino = @fileinode($file); 
    $s = base_convert($ino, 10, 36); 
    return $s; 
} 

Cela semble fonctionner. La question est, que puis-je faire pour rendre l'URL courte encore plus courte? Sur le système où cela est utilisé, les i-nodes pour les fichiers nouvellement ajoutés sont dans une plage qui fait que la fonction ci-dessus renvoie une chaîne de caractères de 7 caractères. Puis-je jeter en toute sécurité une partie (la moitié?) Des bits de l'inode? Et si oui, devrait-il être les bits élevés ou les bits faibles?

J'ai pensé utiliser crc32 du nom de fichier, mais cela rend mes noms courts plus longs que l'utilisation de l'inode.

Est-ce que quelque chose comme ça aurait un risque de collision? J'ai été en mesure de descendre à un seul chiffre en choisissant la bonne valeur de "$ referencefile".

function short_name($file) { 
    $ino = @fileinode($file); 
    // arbitrarily selected pre-existing file, 
    // as all newer files will have higher inodes 
    $ino = $ino - @fileinode($referencefile); 
    $s = base_convert($ino, 10, 36); 
    return $s; 
} 

Répondre

13

Je ne sais pas c'est une bonne idée: si vous devez changer le serveur, ou changer le disque/reformater, les numéros de inodes de vos fichiers changeront très probablement ... Et votre URL courte sera brisée/perdu !

Même chose si, pour une raison quelconque, vous devez déplacer vos fichiers vers une autre partition de votre disque, btw. Une autre idée pourrait être de calculer un certain crc/md5/quel que soit le nom du fichier, comme vous l'avez suggéré, et d'utiliser un algorithme pour le raccourcir.

Voici quelques articles à ce sujet:

+2

Bon point. Un aspect clé des URIs est qu'ils ne devraient jamais changer - http://www.w3.org/Provider/Style/URI - et ceci le violerait. – ceejayoz

+1

Un autre risque serait de permettre involontairement l'accès à des données que vous ne prévoyez pas autoriser. Par exemple, disons que l'utilisateur demande l'inode 17, et que ce soit/etc/shadow (ou 1111, qui se trouve être un lien vers/etc/shadow). Vous devrez faire des vérifications supplémentaires pour vous assurer que le fichier se trouve dans le répertoire où vous l'attendez, et ce n'est peut-être pas trivial ... – atk

0

Découvrez Lessn par Sean Inman; Vous n'avez pas encore joué avec, mais c'est une solution auto-hébergée avec votre propre solution d'URL.

2

Utilisation plutôt astucieuse du système de fichiers. Si vous êtes certain que les identifiants d'inode sont uniques, c'est un moyen rapide de générer les numéros uniques. Je me demande si cela pourrait fonctionner de manière cohérente sur NFS, parce que, évidemment, des machines différentes auront des numéros d'inodes différents. Vous devez ensuite sérialiser les informations de lien dans le fichier que vous créez là.Pour raccourcir les URL un peu, vous pouvez prendre en compte la sensibilité à la casse et faire l'un des encodages de sécurité (vous obtiendrez à peu près la base62 - 10 [0-9] + 26 (az) + 26 (AZ), ou moins si vous supprimez certaines des lettres 'conflit' comme I vs l vs 1 ... il y a beaucoup d'exemples/bibliothèques là-bas).

Vous aurez également besoin de «home» vos ID avec un décalage, comme vous l'avez dit. Vous aurez également besoin de comprendre comment garder le fichier temporaire/fichier journal, etc création de manger votre espace de clés.

Questions connexes