note 120123 added to function.uniqid
| From: | hackan at gmail dot com | Date: | Sat, 05 Nov 2016 19:17:28 +0000 |
| Subject: | note 120123 added to function.uniqid | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-207019@lists.php.net to get a copy of this message | ||
Seriously, avoid using this function. Here's an example of why:
<?php
for($i=0;$i<20;$i++) {
echo uniqid(), PHP_EOL;
}
?>
Output:
5819f3ad1c0ce
5819f3ad1c0ce
5819f3ad1c0ce
5819f3ad1c0ce
5819f3ad1c0ce
5819f3ad1c0ce
5819f3ad1c0ce
5819f3ad1c0ce
5819f3ad1c4b6
5819f3ad1c4b6
5819f3ad1c4b6
5819f3ad1c4b6
5819f3ad1c4b6
5819f3ad1c4b6
5819f3ad1c4b6
5819f3ad1c4b6
5819f3ad1c4b6
5819f3ad1c4b6
5819f3ad1c4b6
5819f3ad1c4b6
As you can see, using it w/ a DB can cause the creation of documents with repeated ID's. You
should instead opt for:
<?php
function uniqidReal($lenght = 13) {
// uniqid gives 13 chars, but you could adjust it to your needs.
if (function_exists("random_bytes")) {
$bytes = random_bytes(ceil($lenght / 2));
} elseif (function_exists("openssl_random_pseudo_bytes")) {
$bytes = openssl_random_pseudo_bytes(ceil($lenght / 2));
} else {
throw new Exception("no cryptographically secure random function available");
}
return substr(bin2hex($bytes), 0, $lenght);
}
?>
Test:
<?php
for($i=0;$i<20;$i++) {
echo uniqid(), "\t", uniqidReal(), PHP_EOL;
}
?>
Output:
5819fa0b63be3 9f39aa0ecd89d
5819fa0b70ed3 2c0735cabfcce
5819fa0b712bb 15e45d1ca1e90
5819fa0b712bb 89593dc230eb3
5819fa0b712bb 449795704aeef
5819fa0b712bb b046877b80ac9
5819fa0b712bb 0a6fa0ae3ec7b
5819fa0b712bb ba2f3f4d6afe0
5819fa0b712bb af03cfac83fd6
5819fa0b712bb eb9c3c6d475c0
5819fa0b712bb edfbbf59d5e1b
5819fa0b712bb 500dca18888d4
5819fa0b716a3 4f5a40ef715f1
5819fa0b716a3 154e42b616825
5819fa0b716a3 a879a22663c9b
5819fa0b716a3 ea7c044ddda8a
5819fa0b716a3 2c81a44dc674e
5819fa0b716a3 bb32f37304fd9
5819fa0b716a3 30cdf6c0317d7
5819fa0b716a3 d25f529d126ae
----
Server IP: 72.52.91.14
Probable Submitter: 190.247.212.171
----
Manual Page -- http://php.net/manual/en/function.uniqid.php
Edit -- https://master.php.net/note/edit/120123
Del: integrated -- https://master.php.net/note/delete/120123/integrated
Del: useless -- https://master.php.net/note/delete/120123/useless
Del: bad code -- https://master.php.net/note/delete/120123/bad+code
Del: spam -- https://master.php.net/note/delete/120123/spam
Del: non-english -- https://master.php.net/note/delete/120123/non-english
Del: in docs -- https://master.php.net/note/delete/120123/in+docs
Del: other reasons-- https://master.php.net/note/delete/120123
Reject -- https://master.php.net/note/reject/120123
Search -- https://master.php.net/manage/user-notes.php