PDA

View Full Version : سوال: چطوری برای هر فایلی که آپلود می شه آدرس مختلفی بگیریم؟



ABZiko
جمعه 14 شهریور 1393, 19:26 عصر
سلام، عنوانم یکم گیج کننده بود ولی اینو باید بگم که بنده یک آپلودر ساختم ولی مثلا اگر فایل Download.png رو آپلود می کنم، فایل آپلود می شه ولی اگر دوباره همون فایل رو آپلود کنم، دیگه فایل در قسمتی که من مشخص کردم نمی آد، چون اسم هر دوتا شون یکی هست، در صورتی که نام خیلی از فایل ها یکی می تونن باشن ، به همین خاطر می خواستم بدونم روشی نیست که این مشل رو حل کنیم؟

ashokri.nll
جمعه 14 شهریور 1393, 20:34 عصر
کاری نداره یک بررسی کنید اگه فایل قبلا بود یه عدد رندوم بزار اولش همینننننننننننننن و بس اگه کد میخای هم بگو که بهت بدم .

ABZiko
جمعه 14 شهریور 1393, 21:17 عصر
ممنون، اول خودم می نویسم اگر مشکلی بود بهتون اطلاع می دم. فقط اگر تابع وجود داشتن، همون isset هست یا نه؟

arash691
جمعه 14 شهریور 1393, 21:21 عصر
نه باید تو اون مسیری که فایل ها قرار دارن بگردی همچین فایلی وجود داره یا نه با تابع
file_exists($path) این کارو بکن اگه بود true میده

ABZiko
جمعه 14 شهریور 1393, 21:28 عصر
ممنون، بعد با کدوم توابع تغییر نام بدم و عدد رندوم بزارم؟

ABZiko
جمعه 14 شهریور 1393, 21:45 عصر
اینو نوشتم، درسته ؟


$random=rand(1,999999999);
str_replace('',$random,$name);

2undercover
جمعه 14 شهریور 1393, 21:51 عصر
اینو نوشتم، درسته ؟


$random=rand(1,999999999);
str_replace('',$random,$name);




این روش زیاد مناسب نیست چون احتمال این که باز هم دو اسم مشابه تولید بشه هست. بهتره از مقادیری استفاده بکنید که احتمال تکرار توی اون ها نیست (یا حداقل خیلی خیلی کم باشه)؛ مثل زمان (که البته باز هم احتمال تکرار هست) و ترکیب اون با (Hash) اطلاعات کاربر مثل IP، اطلاعات مرورگر، زمان ارسال درخواست (Request Time) و هش (Hash) کردن اون ها. هم چنین می تونید در کنار همه ی این ها از اون تابع رندوم هم استفاده بکنید.

ABZiko
جمعه 14 شهریور 1393, 21:54 عصر
اونطوری یکم نام فایل زیاد نمی شه؟ مثلا استفاده از hash و ip ؟

2undercover
جمعه 14 شهریور 1393, 22:12 عصر
منظورم این بود که تمام اون اطلاعات رو در نهایت Hash بکنید که این طوری همیشه فایل یک نام با طول ثابت (بسته به الگوریتم هش) خواهد داشت. برای مثال هم این کد زیر رو در نظر بگیرید:


$fileName = md5(microtime(true) . serialize($_SERVER) . $_FILES['file']);

arash691
جمعه 14 شهریور 1393, 22:14 عصر
برای اینکه بفهمی بازم اسمی که ساختی موجود هست تو اون مسیر :



while(file_exists($path)){
$file_name = rand(0,9).$_FILE['field_name']['name']; }

2undercover
جمعه 14 شهریور 1393, 22:17 عصر
البته روش هایی هم که دوستان گفتند هم میشه، مثل ویندوز که اگر یک فایل موجود باشه و شما بخواهید یک فایل دیگه با همون نام ایجاد بکنید در انتهای نام فایل یک عدد به ترتیب اضافه می کنه؛ مثلا:


New Folder
New Folder (2)
New Folder (3)
...

Mohammadsgh
جمعه 14 شهریور 1393, 22:35 عصر
روش هش جالبتر و بهتره

Mohammadsgh
جمعه 14 شهریور 1393, 22:38 عصر
کاری نداره یک بررسی کنید اگه فایل قبلا بود یه عدد رندوم بزار اولش همینننننننننننننن و بس اگه کد میخای هم بگو که بهت بدم .
دوستان به جای ماهی دادن ماهی گیری یاد بدید.با کد آماده ایشون برنامه نویس نمیشن:لبخندساده:

ABZiko
جمعه 14 شهریور 1393, 22:39 عصر
دلیل خاصی داره که هش بهتره؟ صرفا به خاطر همون الگوریتم های ریاضی که داره یا نه؟ مثلا اگر کلمه دانلود رو هش کنه با یک فرمول ثابت و اگر دوباره بخواد یک فایل رو با همون نام هش کنه مه یکی میشه.

ABZiko
جمعه 14 شهریور 1393, 22:45 عصر
یک سوال دیگه، sha از md5 قوی تر نیست؟

arash691
جمعه 14 شهریور 1393, 23:07 عصر
واسه کار شما زیاد مهم نیست کدوم قوی تره ... همون md5 خوبه ... زیاد وسواس بخرج نده :چشمک:

Mohammadsgh
شنبه 15 شهریور 1393, 09:44 صبح
دلیل خاصی داره که هش بهتره؟ صرفا به خاطر همون الگوریتم های ریاضی که داره یا نه؟ مثلا اگر کلمه دانلود رو هش کنه با یک فرمول ثابت و اگر دوباره بخواد یک فایل رو با همون نام هش کنه مه یکی میشه.
چون هش برای هر رشته کارکترهای خاصی ایجاد میکنه.شما هش و rand رو با هم ترکیب بکن اونجوری خیلی بهتر میشه:لبخندساده: