2017-02-06 11 views
0

최대 6 자이고 숫자와 알파벳이 섞인 문자열이 필요합니다.base_convert 및 제한 길이로 PHP에서 고유 한 문자열을 만듭니다.

How can I make short random unique keys, like YouTube video IDs, in PHP?

매우 유용

PHP generate a unique string

을하지만 그들은 길이 문자열이 10 할 - 12. 내 질문이 코드의 출력은 항상 고유 여부이다 : 나는 확인?

base_convert(microtime(false), 6, 36); 

또는

base_convert(uniqid('test',true), 6, 36); 

: 나는 (6) 변환하지만 입력이 분명히 36 (10)로 변환하는 경우가 발생하기 때문에 내가 할 기본 6. 될 수 없습니다 10 12 길이.

+0

나는 당신이 (6) 변환하려는하지만 입력이 분명히 6 – apokryfos

+0

@apokryfos 그래 난 할 기반이 될 것되지 않기 때문에이 전혀 작동 것이라고 생각하지 않습니다. 왜냐하면 10에서 36으로 변환하면 10-12 길이가 생기기 때문입니다. 어떻게해야합니까? –

+0

그러나 밑줄 6은 숫자가 모두 0-5 사이에 있음을 의미합니다. 그렇지 않은 경우입니다. 대신 ['substr']을 수행해야합니다 (http://php.net/manual/en/function.substr.php) – apokryfos

답변

1

짧은 답변 : 아니요.하지만 개인 웹 사이트처럼 작은 것을하거나 매우 소수의 사람 만 사용하는 내부 도구 일 경우 괜찮습니다.

긴 대답 : 안전한 작업을 수행하거나 데이터베이스를 공유하는 여러 서버를 사용하려는 경우에는 절대로 안됩니다. 공격자는 소액의 시간에 의존 할 때 서버가 중복 ID를 생성 할 때까지 서버에 도달하는 데 걸리는 시간을 정확하게 파악할 수 있습니다. uniqid 함수는 uniq 값 (PHP 매뉴얼에서 직접)을 반환하는 것이 보장되지 않으며 NTP를 사용하여 시간을 업데이트하고 5 초 전에 시간을 조정하면 중복 ID를 확실히 생성합니다.

+0

어떻게하면 좋을까요? –

+0

무언가를 독특하게 만드는 가장 쉬운 방법은 카운터로 원자 적 연산을 수행하는 것입니다. 가장 쉬운 방법은 SQL 데이터베이스를 사용하고 자동 증가 ID를 사용하는 것입니다. 이미 가능한 모든 작업을 처리했기 때문입니다. 데이터베이스를 사용하지 않으려는 경우, 간단한 정수를 저장할 파일 시스템에 파일을 생성 할 수 있습니다. 독점적 인 파일 잠금, 잠금 대기 및 잠금 해제를 구현해야합니다. http://php.net/manual/en/function.flock.php에 대해 읽어보십시오. – Dimi