15

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

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

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

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

どうもありがとう!

4

3 に答える 3

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

マイクロ秒単位の現在の時刻に基づいて、接頭辞付きの一意の識別子を取得します。

USAGE: $id = uniqid(rand(), true);
于 2008-10-08T02:45:25.417 に答える
9

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

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

于 2012-01-25T21:45:40.993 に答える
5

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

その後に大きな乱数を追加することで、さらに「ユニーク」にすることができます。

于 2008-10-08T02:44:45.747 に答える