ممکن است در برنامه خود نیاز داشته باشید تا برای یک کار خاص، شناسه و رشته های یکتایی ایجاد کنید. در این مطلب میخواهیم شما را با روشی ساده و راحت برای ساخت شناسه های منحصر به فرد در زبان برنامه نویسی PHP آشنا کنیم.
فرض کنید بخواهید در برنامه ای به فایل های آپلود شده شناسه ای خاص اختصاص دهید تا از تکراری شدن نام فایل ها جلوگیری شود، یا برای شناسایی رکوردهای اطلاعاتی خاص، نیازمند تعریف شناسه یکتا (Unique ID) باشید.
بسیاری از برنامه نویسان از تابع md5() به این منظور استفاده میکنند. همانطور که میدانید تابع md5 برای هش کردن یک رشته استفاده میشود و به نوعی میتوان گفت برای هر رشته متفاوت، یک هش منحصر به فرد ایجاد میکند.
برای مثال به رشته یکتای ایجاد شده به روش زیر توجه کنید.
echo md5( time() . mt_rand(1,1000) ); // 774d2de0ce422bf935042b2d99503eae
در حالت کلی میتوان گفت که تابع md5 برای این منظور ایجاد نشده و استفاده از آن برای ایجاد شناسه های یکتا در بیشتر موارد، کار حرفه ای نخواهد بود!
یک تابع در زبان برنامه نویسی PHP به نام uniqid() وجود دارد که برای همین منظور از آن استفاده میشود.
echo uniqid(); // 5b87d9de12899
اگر چند بار از این تابع پشت سر هم استفاده کنید، متوجه خواهید شد که شناسه های یکتای ایجاد شده در حروف اول خود با یکدیگر مشترک هستند.
دلیل این مسئله این است که رشته های تولیدی بر اساس زمان لحظه ای سرور ایجاد میشوند.
این ویژگی در استفاده از تابع uniqid دارای یک اثر جانبی جالب و مفید است و آن این است که هر شناسه جدید تولید شده به ترتیب حروف الفبا می آید، بنابراین میتوان آنها را به راحتی و با استفاده از ترتیب حروف الفبا مرتب سازی کرد.
برای کاهش شانس ساخته شدن شناسه های تکراری میتوان به ابتدای رشته یکتای تولید شده، بسته به کارمان، یک پیشوند (prefix) اضافه کرد. برای این منظور میتوان از آرگومان ورودی اول تابع uniqid استفاده کرد و یک رشته را به عنوان ورودی به آن پاس داد.
echo uniqid('pre_'); // pre_5b87dd9332b67
این تابع یک آرگومان ورودی دوم نیز به صورت true/false دریافت میکنید. در صورتی که این مقدار true باشد، آنتروپی (entropy) شناسه های ایجاد شده افزایش می یابد. به صورت پیشفرض این مقدار false است و برای جلوگیری از عدم ایجاد شناسه های یکتا در یک لحظه، میتوان این مقدار را تغییر داد.
echo uniqid('',true); // 5b87dfa7aa0604.08559705
همانطور که قبل تر نیز گفتیم، تابع uniqid یک شناسه یکتا را بر اساس microtime (زمان فعلی به صورت میکروثانیه) ایجاد میکند.
در برخی منابع شناسه تولید شده توسط این تابع را مطلوب نمیدانند زیرا به زمان سرور بستگی دارد و بعضاً برای ایجاد شناسه دشوارتر از لحاظ پیش بینی، همان تابع هش md5 را پیشنهاد میکنند.
در حالت کلی برای یکسری کارهای غیر امنیتی و ایجاد شناسه های یکتا در PHP میتوان از تابع uniqid استفاده کرد.
شناسه های ساخته شده توسط این تابع کوتاه تر از رشته تولید شده توسط md5 خواهند بود و این مورد میتواند در حجم بالا، به صرفه جویی در فضای مصرفی شما منجر شود.
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم
[…] داد. جهت داشتن یک شناسه یکتا برای هر فایل، میتوانید آموزش ساخت شناسه منحصر به فرد در PHP را که قبلا در سایت منتشر شده […]