2009-08-24 4 views
0

제가 작업하고있는 사이트는 tinyurl이나 bit.ly와 같은 제 3 자에 의존하기보다는 단축 URL을 생성하려고합니다.URL 단축 : 짧은 이름으로 inode 사용?

분명히 사이트에 추가 될 때 새 URL을 계속 계산하여 짧은 URL을 생성하는 데 사용할 수 있습니다. 그러나 나는 가능한 한 피하는 것을 시도하고있다. 왜냐하면이 한 가지를 작동시키는 것이 많은 일처럼 보인다.

짧은 URL이 필요한 것은 웹 서버의 모든 실제 파일입니다. 현재의 해결책은 사용 준비가 완료되어 고유성이 보장 된 inode 번호를 사용하는 것입니다.

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

이것은 작동하는 것 같습니다. 문제는 짧은 URL을 더 짧게 만들려면 어떻게해야합니까?

이 파일이 사용되는 시스템에서 새로 추가 된 파일의 inode는 위의 함수가 7 자 길이의 문자열을 반환하도록하는 범위 내에 있습니다.

아이 노드의 비트 중 일부 (1/2)를 안전하게 버릴 수 있습니까? 그렇다면 상위 비트 또는 하위 비트 여야합니까?

파일 이름의 crc32를 사용한다고 생각했지만 실제로는 짧은 이름이 inode를 사용하는 것보다 오래 사용됩니다.

이와 같은 것이 충돌 위험이 있습니까? "$ referencefile"의 올바른 값을 선택하여 한 자리 숫자로 줄일 수있었습니다. 당신이 그것을 서버를 변경하거나 디스크를 변경/포맷해야하는 경우, 파일의 아이 노드 번호는 대부분의 아마 ... 변경됩니다 그리고 당신의 짧은 URL은 파괴 될 것이다 : 이것은 좋은 생각이다

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

답변

13

확실하지 않음/잃어버린 !

어떤 이유에서든 파일을 디스크의 다른 파티션으로 이동해야하는 경우 동일합니다 (btw).


또 다른 아이디어는 제안처럼 파일의 이름이 무엇이든, 어떤 CRC/MD5를/계산하고 그것을 "단축"몇 가지 알고리즘을 사용할 수 있습니다. 여기

그것에 대해 몇 가지 기사입니다

+2

좋은 지적. URI의 중요한 측면 중 하나는 그들이 결코 변경되어서는 안된다는 것입니다 - http://www.w3.org/Provider/Style/URI - 이것은 위반합니다. – ceejayoz

+1

또 다른 위험은 사용자가 허용하지 않을 데이터에 대한 실수로 액세스를 허용하는 것입니다. 예를 들어, 사용자가 inode 17을 요청하고/etc/shadow (또는 1111을 요청하면/etc/shadow에 대한 링크가됩니다)라고 가정 해 봅시다. 파일이 예상되는 디렉토리에 있는지 확인하기 위해 추가 검사를 수행해야하며 완전히 사소하지 않을 수도 있습니다 ... – atk

0

숀 잉먼에 의해 체크 아웃 Lessn; 아직 사용하지 않았지만 자체 호스팅 URL 솔루션입니다.

2

파일 시스템을 오히려 영리하게 사용하십시오. 아이 노드 ID가 고유하다는 보장이 있다면 고유 한 숫자를 생성하는 빠른 방법입니다. NFS를 통해 일관되게 작동하는지 궁금합니다. 분명히 다른 시스템은 다른 inode 번호를 갖기 때문입니다. 그런 다음 생성 한 파일의 링크 정보를 직렬화하면됩니다.

URL을 약간 줄이려면 대소 문자를 구분하고 안전한 인코딩을 수행하십시오 (10에서 [0-9] + 26 (az) + 26 (AZ) 이하, Il1과 같은 '충돌'문자 중 일부를 제거하면 적습니다. 많은 예제/라이브러리가 있습니다.)

당신도 말한 것처럼 오프셋을 사용하여 ID를 '집에 추가'할 수 있습니다. 또한 임시 파일/로그 파일 등을 생성하여 키 공간을 차지하지 않도록하는 방법을 알아야합니다.

관련 문제