Я собираюсь загружать изображения в систему и нуждаться в их ссылках с помощью уникального уникального идентификатора. Я немного читал о GUID, и мне интересно, какой лучший подход к его созданию в PHP. Должен ли я md5 () текущая временная метка и ее соль, или уникальная функция PHP ( http://www.php.net/manual/en/function.uniqid.php ) достаточно?
Благодаря!
РЕДАКТИРОВАТЬ:
Хлоп! Я забыл об этом древнем ответе. Чтобы разъяснить путаницу, созданную по моей наивности (в соответствии с комментариями, сделанными ниже): MD5 (как и большинство полезных хэшей по своей природе) не являются инъективными, поэтому их выход не гарантированно уникален для всех входных данных.
Если хеш-коллизии являются проблемой (в этом случае они есть), использование этого метода потребует проверки после хэширования, был ли уже сгенерирован идентичный ключ.
Поскольку uniqid использует текущее время в микросекундах для генерации guid, практически нет шансов, что вы когда-нибудь столкнетесь с одним и тем же дважды.
Поэтому, если вы просто используете его для создания уникальных имен файлов, uniqid () будет достаточным. Если вы хотите, чтобы пользователи не догадывались о руководстве, вы также могли бы сделать это сложнее и md5.
GUID – это версия UUID от Microsoft. PHP uniqid – это версия 4 UUID. Определенно достаточно хорошо.
Я также хочу создать guid для вызова .net api, и эта функция генерирует ключ в формате guid, и он работает для меня
function generateGuid($include_braces = false) { if (function_exists('com_create_guid')) { if ($include_braces === true) { return com_create_guid(); } else { return substr(com_create_guid(), 1, 36); } } else { mt_srand((double) microtime() * 10000); $charid = strtoupper(md5(uniqid(rand(), true))); $guid = substr($charid, 0, 8) . '-' . substr($charid, 8, 4) . '-' . substr($charid, 12, 4) . '-' . substr($charid, 16, 4) . '-' . substr($charid, 20, 12); if ($include_braces) { $guid = '{' . $guid . '}'; } return $guid; } }