質問

競合することなくFSにユーザーがアップロードしたコンテンツを保存するために、phpで一意のIDを生成しようとしています。私はphpを使用していますが、現時点ではこの小さなスニペットがUIDの生成を担当しています。

$id = tempnam (".", "");
unlink($id);
$id = substr($id, 2);

このコードは恐ろしい:FS上に一時ファイルを作成して削除し、生成された文字列の関連する一意の部分のみを保持します。

これを行うためのより良い方法はありますか、最も好ましくは外部の依存関係なしですか?

ありがとう!

役に立ちましたか?

解決

string uniqid ([ string $prefix [, bool $more_entropy ]] )

現在の時間(マイクロ秒単位)に基づいて、プレフィックス付きの一意の識別子を取得します。

USAGE: $id = uniqid(rand(), true);

他のヒント

uniqid()とrand()は両方とも現在時刻に基づく関数であるため、rand()はエントロピーをほとんど追加しません。時間はそれぞれの呼び出し間でわずかな量しか変化しないためです。

more_entropy オプションを使用している限り、単一サーバー内で衝突が発生することはありません。クラスタリングを使用する場合は、サーバー間で異なるプレフィックスを必ず含めてください。

uniqid()は、ほとんどの実用的な状況であなたが探しているものです。

さらに「uniq」にすることができます;その後に大きな乱数を追加します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top