الدالة uniqid()‎ في PHP

من موسوعة حسوب
< PHP
اذهب إلى التنقل اذهب إلى البحث

(PHP 4, PHP 5, PHP 7)

تُنشئُ الدالة uniqid()‎ معرفًا فريدًا.

الوصف

string uniqid ([ string $prefix = "" [, bool $more_entropy = FALSE ]] )

تحصل الدالة uniqid()‎ على معرف فريد مع إمكانية إضافة سابقة له استنادًا إلى الوقت الحالي بالميكروثانية.

تحذير: لا تولد الدالة uniqid()‎ قيمًا آمنة مشفرة، ويجب ألا تستخدم لأغراض التشفير. إذا كنت بحاجة إلى قيمة آمنة مشفرة، ففكر في استخدام الدالة random_int()‎ أو الدالة random_bytes()‎ أو الدالة openssl_random_pseudo_bytes()‎ بدلاً منها.

تنبيه: لا تضمن الدالة uniqid()‎ تَفَرُّدَ القيمة المعادة. نظرًا لأن معظم الأنظمة تعدل ساعة النظام باستخدام بروتوكول NTP أو غيره، أي أنَّ ساعة النظام ستُغيّر طوال الوقت. لذلك، من الممكن ألا تعيد الدالة uniqid()‎ مُعرِّفًا فريدًا للعملية (process) أو للخيط (thread). استخدم المعامل more_entropy لزيادة احتمالية توليد قيمة فريدة.

المعاملات

prefix

يمكن أن يكون استخدام المعامل prefix مفيدًا، فلو حاولتَ مثلًا إنشاء عدّة معرّفات في الوقت نفسه في أكثر من خادم، فقد يصدف وأن يُنفَّذ السكربت في نفس الوقت تمامًا، مما يولّد معرّفات متماثلة وغير فريدة.

بترك المعامل prefix فارغًا، فسيكون طول السلسلة النصية المُعادَة 13 حرفًا. إذا كانت قيمة المعامل more_entropy هي TRUE، فسيكون طولها 23 حرفًا.

more_entropy

إذا ضُبِطَ المعامل more_entropy إلى القيمة TRUE، فستضيف الدالة uniqid()‎ إحتمالًا إضافيًّا (باستخدام خوارزمية مولد المتطابقة الخطية المختلطة) في نهاية القيمة المعادة، مما يزيد من احتمال أن تكون النتيجة فريدة.

القيم المعادة

تعيد الدالة uniqid()‎ معرفًا فريدًا يستند إلى الطابع الزمني كسلسلة نصية.

تحذير: تحاول الدالة uniqid()‎ إنشاء معرف فريد، ولكنها لا تضمن تَفَرُّدَ القيمة المعادة.

أمثلة

المثال 1: مثال على الدالة uniqid()

<?php
printf("uniqid(): %s\r\n", uniqid());
printf("uniqid('php_'): %s\r\n", uniqid('php_'));
printf("uniqid('', true): %s\r\n", uniqid('', true));
?>

ملاحظات

ملاحظة: في برمجية Cygwin، يجب تعيين قيمة المعامل more_entropy إلى القيمة TRUE لكي تعمل الدالة uniqid()‎.

مصادر