Сайт, над которым я работаю, хочет создавать собственные сокращенные URL-адреса, а не полагаться на третьи стороны, такие как tinyurl или bit.ly.
Очевидно, что я мог бы отслеживать количество новых URL-адресов по мере их добавления на сайт и использовать их для создания коротких URL-адресов. Но я стараюсь избегать этого, если это возможно, так как кажется, что для того, чтобы это сработало, требуется много работы.
Поскольку все, что требует коротких URL-адресов, - это все реальные физические файлы на веб-сервере, мое текущее решение состоит в том, чтобы использовать их номера инодов, поскольку они уже сгенерированы для меня и готовы к использованию и гарантированно будут уникальными.
function short_name($file) {
$ino = @fileinode($file);
$s = base_convert($ino, 10, 36);
return $s;
}
Это похоже на работу. Вопрос в том, что я могу сделать, чтобы короткий URL стал еще короче?
В системе, где это используется, inode для вновь добавленных файлов находятся в диапазоне, который заставляет вышеприведенную функцию возвращать строку длиной 7 символов.
Могу ли я безопасно выбросить (половину?) Битов из инода? И если да, то должны ли это быть старшие или младшие биты?
Я думал об использовании crc32 имени файла, но это фактически делает мои короткие имена длиннее, чем при использовании inode.
Может ли что-то подобное иметь риск столкновения? Мне удалось перейти к одной цифре, выбрав правильное значение «$ 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;
}