note 120123 added to function.uniqid

From: 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

« previous php.notes (#207019) next »