من میخوام یک عکس که ارسال میشه اسمش تغییر کنه و اون اسم در دیتابیس برای نمایش در سایت ذخیره بشه .
چند تا راه حل داره
2 - استفاده از زمان حال که توی بیشتر زبان های برنامه نویسی هست مثل date() توی php
1 - تو بیشتر زبان های برنامه نویسی یه تابع هست اعداد تصادفی می سازه مثل rand() توی php :
ما یه ارایه می سازیم کاراکتر های مجاز که میشه باهاش اسم فایل رو ساخت رو توش قرار می دیم
یه حلقه میزنیم و توی اون حلقه هر بار یه کاراکتر تصادفی با استفاده از ارایه و تابعی که عدد تصادفی می سازه انتخاب می کنیم (چجوری ؟
می گیم اون تابع تصادفی یه عدد مثلا بین0 تا 5 انتخاب بکنه بعد دقیقا همون بخش از ارایه رو انتخاب می کنین : تابع میده 2 ما هم دومین اندیس ارایه رو انتخاب می کنیم و با رشته ی قبلی کانکتش می کنیم )
حالا هر وقت یه اسم جدید می سازیم نگاه می کنیم اگه همچین اسمی وجود داشت درون یک فولدر خاص مراحل رو از اول می ریم تا وقتی که نام تصادفی بیرون اومده uniq باشه
مثال کامل (البته شاید خیلی clean code نباشه)
$allowedChars = ['a','b','c'];
function randomNameCreator ( array $allowedChars , string $mime, int $length){
$randomName = '';
for ($i = 0 ; $i <= $length ; i++){
lengthOfArray = count($allowedChars);
selectedChar =$allowedChar[rand(0,lengthOfArray)];
$randomName .= $selectedChar;
}
$randomName .= $mime;
if (file_exists(ROOTPACH.$randomName)) {
randomNameCreator($allowedChars,$mime,$length);
}
return $randomName;
}
randomNameCreator($allowedChars,'jpg',2);
// examole of output
// aa.jpg
randomNameCreator($allowedChars,'jpg',2);
// example of output
//aa.jpg
// exist so again
// cb.jpg
شما میتونید فایلی را که دریافت میکنید را با اعدد چند رقمی به صورت رندم ذخیره کنید تا نام ها مشابه هم نباشند.
$filename = explode(".", $_FILES["file"]["name"]);
$newfilename = round(microtime(true)) . '.' . end($filename );
چند تا راه حل داره
2 - استفاده از زمان حال که توی بیشتر زبان های برنامه نویسی هست مثل date() توی php
1 - تو بیشتر زبان های برنامه نویسی یه تابع هست اعداد تصادفی می سازه مثل rand() توی php :
ما یه ارایه می سازیم کاراکتر های مجاز که میشه باهاش اسم فایل رو ساخت رو توش قرار می دیم
یه حلقه میزنیم و توی اون حلقه هر بار یه کاراکتر تصادفی با استفاده از ارایه و تابعی که عدد تصادفی می سازه انتخاب می کنیم (چجوری ؟
می گیم اون تابع تصادفی یه عدد مثلا بین0 تا 5 انتخاب بکنه بعد دقیقا همون بخش از ارایه رو انتخاب می کنین : تابع میده 2 ما هم دومین اندیس ارایه رو انتخاب می کنیم و با رشته ی قبلی کانکتش می کنیم )
حالا هر وقت یه اسم جدید می سازیم نگاه می کنیم اگه همچین اسمی وجود داشت درون یک فولدر خاص مراحل رو از اول می ریم تا وقتی که نام تصادفی بیرون اومده uniq باشه
مثال کامل (البته شاید خیلی clean code نباشه)
$allowedChars = ['a','b','c'];
function randomNameCreator ( array $allowedChars , string $mime, int $length){
$randomName = '';
for ($i = 0 ; $i <= $length ; i++){
lengthOfArray = count($allowedChars);
selectedChar =$allowedChar[rand(0,lengthOfArray)];
$randomName .= $selectedChar;
}
$randomName .= $mime;
if (file_exists(ROOTPACH.$randomName)) {
randomNameCreator($allowedChars,$mime,$length);
}
return $randomName;
}
randomNameCreator($allowedChars,'jpg',2);
// examole of output
// aa.jpg
randomNameCreator($allowedChars,'jpg',2);
// example of output
//aa.jpg
// exist so again
// cb.jpg
@parhamdeveloper
نظرم رو ویرایش کردم ملاحظه کنید اگه کمکتون کرد اون رو به عنوان بهترین پاسخ انتخاب کنید
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟