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;
}
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
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