Pergunta

O site que estou trabalhando em desejos de gerar os seus próprios URLs encurtadas em vez de confiar em um terceiro partido como tinyurl ou bit.ly.

Obviamente, eu poderia manter um funcionamento contar novas URLs como eles são adicionados ao site e usar isso para gerar os URLs curtas. Mas eu estou tentando evitar que se possível, uma vez que parece ser um monte de trabalho apenas para fazer este trabalho uma coisa.

Como as coisas que precisam URLs curtas são todos os arquivos físicos reais no servidor web minha solução atual é usar seus números de inode como aqueles que já são gerados para me pronto para usar e garantido para ser único.

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

Isso parece funcionar. A pergunta é, o que posso fazer para tornar o URL curta ainda mais curto?

No sistema onde isso está sendo usado, os inodes para arquivos recém-adicionados são em um intervalo que faz a função acima retornar uma string 7 caracteres.

Can I com segurança jogar fora alguns (metade?) Dos bits do inode? E se assim for, deve ser os bits altos ou os bits baixos?

Pensei em usar o crc32 do nome do arquivo, mas que na verdade faz meus nomes curtos mais do que usando o inode.

Será que algo como isto tem qualquer risco de colisões? Eu tenho sido capaz de descer para um dígito, escolhendo o valor correto 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;
}
Foi útil?

Solução

Não sei se este é uma boa idéia: se tiver de servidor mudança, ou disco de mudança / reformatá-lo, os números inodes de seus arquivos provavelmente vai mudar ... e toda a sua URL curta será quebrado / perdido

A mesma coisa se, por qualquer razão, você precisa mover seus arquivos para outra partição do seu disco, btw.


Outra idéia poderia ser para calcular alguns CRC / MD5 / whatever do nome do arquivo, como você sugeriu, e usar algum algoritmo para "encurtar"-lo.

Aqui estão algumas artigos sobre isso:

Outras dicas

Em vez do uso inteligente do sistema de arquivos lá. Se você é garantido que ids inode são únicos é uma maneira rápida de gerar os números exclusivos. Eu me pergunto se isso poderia funcionar de forma consistente ao longo do NFS, porque, obviamente, diferentes máquinas terão diferentes números de inode. Você seria então apenas serializar a informação link no arquivo que você criar lá.

Para encurtar as URLs um pouco, você pode levar a sensibilidade caso em consideração, e fazer uma das codificações seguro (você vai obter cerca de base62 fora dele - 10 [0-9] + 26 (az) + 26 ( AZ), ou menos, se você remover algumas das letras de 'conflito' como I vs l vs 1 ... há uma abundância de exemplos / bibliotecas lá fora).

Você também vai querer 'casa' seus ids com um deslocamento, como você disse. Você também vai precisar para descobrir como manter arquivo temp / arquivo de log, etc criação de comer o seu keyspace.

Confira Lessn por Sean Inman; Não tenho jogado com ele ainda, mas é um rolo de sua própria solução de URL auto-hospedado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top