توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : سوال php | نام گذاری فایل آپلود شده
samanmo
December 8th, 2016, 06:53
باسلام
واقعا دو روزه گیج شدم!!!
من ی اسکریپت واترمارک نوشتم که باید برای ذخیره سازی بهش نام فایل رو بدم، خب طبیعیه که هربار باید ی نام جدید باشه.
برای تولید نام گفتن از date(y,m,d,h,i استفاده کنم که نشد ، چون در لحظه آپلود اگر دقیقه یهو عوض شه دو فایل نیمه کاره آپ میشه.
خلاصه اومدم ساعت رو ضربدر دقیقه کردم بازم نشد. چون دو خروجی میخوام . نتیجه در پنجاه درصد مواقع اینطوری میشه
نام فایل آپلود شده 34-787-877
نام فایل اکو شده برای آپ کننده 88-766-877
گفتن از return استفاده کن که عملیات متوقف بشه ولی من نتونستم (مهم نیست که نام خروجی عدد باشه یا رشته)
لطفا اساتید کمک کنن ،
omid1991
December 8th, 2016, 07:20
باسلام
واقعا دو روزه گیج شدم!!!
من ی اسکریپت واترمارک نوشتم که باید برای ذخیره سازی بهش نام فایل رو بدم، خب طبیعیه که هربار باید ی نام جدید باشه.
برای تولید نام گفتن از date(y,m,d,h,i استفاده کنم که نشد ، چون در لحظه آپلود اگر دقیقه یهو عوض شه دو فایل نیمه کاره آپ میشه.
خلاصه اومدم ساعت رو ضربدر دقیقه کردم بازم نشد. چون دو خروجی میخوام . نتیجه در پنجاه درصد مواقع اینطوری میشه
نام فایل آپلود شده 34-787-877
نام فایل اکو شده برای آپ کننده 88-766-877
گفتن از return استفاده کن که عملیات متوقف بشه ولی من نتونستم (مهم نیست که نام خروجی عدد باشه یا رشته)
لطفا اساتید کمک کنن ،
سلام وقت بخیر
فرقی نداره اسم چی باشه ولی یونیک بودنش بهتره یونیک باشه
بهترینروش به نظر من
وقتی میخوای کد ها اجرا بشه تو دیتابیس یه انینسرت میزنی نام فایل اصلی با نام فایل خروجی ذخیره میشه
توی مرحله بعد دیگه اینسرت نمیکنی بلکه قبلی رو میخونی درصورت نیاز آپدیت میکنی آخری سری هم اسم و چیزای دیگه رو چاپ میکنی چیز زیاد سخت و پیچیده ای نیست
miladtnt
December 8th, 2016, 13:32
دوست عزیز بنظر من اسمشو میتونی از تابع ماکرو تایم یا تایم استفاده کنی که عدد بزرگی بر حسب ثانیه و میکرو ثانیه میسازن ... ی مثال برات میزنم
$time = microtime();
$time = time();
حالا بیا ازین متغیر هرجا ک میخوای استفاده کن عدد ثابتی هست و دیگه تغییر نمیکنه چون یبار ریختی داخل متغیر و اون لحظه رو نشون میده
Rezash
December 8th, 2016, 13:37
باسلام
واقعا دو روزه گیج شدم!!!
من ی اسکریپت واترمارک نوشتم که باید برای ذخیره سازی بهش نام فایل رو بدم، خب طبیعیه که هربار باید ی نام جدید باشه.
برای تولید نام گفتن از date(y,m,d,h,i استفاده کنم که نشد ، چون در لحظه آپلود اگر دقیقه یهو عوض شه دو فایل نیمه کاره آپ میشه.
خلاصه اومدم ساعت رو ضربدر دقیقه کردم بازم نشد. چون دو خروجی میخوام . نتیجه در پنجاه درصد مواقع اینطوری میشه
نام فایل آپلود شده 34-787-877
نام فایل اکو شده برای آپ کننده 88-766-877
گفتن از return استفاده کن که عملیات متوقف بشه ولی من نتونستم (مهم نیست که نام خروجی عدد باشه یا رشته)
لطفا اساتید کمک کنن ،
در مورد سوال شما دو مشکل هست
اول اینکه اگر دو کاربر همزمان فایل آپلود کنند هر دو یک اسم میگیرند ! چون تنها ملاک شما دقیقه بوده. بهتر است از time و عدد رندوم استفاده کنید.
دوم اینکه چرا دو تا اسم مختلف بگیرید ؟! وقتی نام فایل مشخص شد در یک متغیر یا session بزارید تا برای فایل دوم یا ارسال به کاربر نیاز به فراخوانی مجدد تابع date نداشته باشید.
کدی که اسم رو تولید و استفاده میکنید رو اگر بزارید بهتر میشه راهنمایی کرد
samanmo
December 8th, 2016, 15:03
سلام وقت بخیر
فرقی نداره اسم چی باشه ولی یونیک بودنش بهتره یونیک باشه
بهترینروش به نظر من
وقتی میخوای کد ها اجرا بشه تو دیتابیس یه انینسرت میزنی نام فایل اصلی با نام فایل خروجی ذخیره میشه
توی مرحله بعد دیگه اینسرت نمیکنی بلکه قبلی رو میخونی درصورت نیاز آپدیت میکنی آخری سری هم اسم و چیزای دیگه رو چاپ میکنی چیز زیاد سخت و پیچیده ای نیست
ممنونم،
دیتابیس ندارم،
- - - Updated - - -
دوست عزیز بنظر من اسمشو میتونی از تابع ماکرو تایم یا تایم استفاده کنی که عدد بزرگی بر حسب ثانیه و میکرو ثانیه میسازن ... ی مثال برات میزنم
$time = microtime();
$time = time();
حالا بیا ازین متغیر هرجا ک میخوای استفاده کن عدد ثابتی هست و دیگه تغییر نمیکنه چون یبار ریختی داخل متغیر و اون لحظه رو نشون میده
باسلام ، ممنون
من از دقیقه استفاده میکنم ، در لحظه دو سه اسم تولید میشه ، از ثانیه هم استفاده کردم ولی در لحظه چندین اسم با فایل نصفه نیمه تو هاست ذخیره میشه . درحالیکه وقتی نام ثابت میذارم ی فایل تو هاست میره
- - - Updated - - -
در مورد سوال شما دو مشکل هست
اول اینکه اگر دو کاربر همزمان فایل آپلود کنند هر دو یک اسم میگیرند ! چون تنها ملاک شما دقیقه بوده. بهتر است از time و عدد رندوم استفاده کنید.
دوم اینکه چرا دو تا اسم مختلف بگیرید ؟! وقتی نام فایل مشخص شد در یک متغیر یا session بزارید تا برای فایل دوم یا ارسال به کاربر نیاز به فراخوانی مجدد تابع date نداشته باشید.
کدی که اسم رو تولید و استفاده میکنید رو اگر بزارید بهتر میشه راهنمایی کرد
باسلام و تشکر
خیر ، کاربران دسترسی به آپلود ندارن و خودم و دوتا از مدیران سایت .
کدهام خدمت شما
خلاصه اومدم ساعت رو ضربدر دقیقه کردم بازم نشد. چون دو خروجی میخوام . نتیجه در پنجاه درصد مواقع اینطوری میشه
توی کدهایی که دادید چیز خاصی مشخص نمیشه
دو خروجی رو بیشتر توضیح بدید. دوبار همین اسکریپت با فایل یکسان اجرا میشه ؟
samanmo
December 8th, 2016, 16:51
خلاصه اومدم ساعت رو ضربدر دقیقه کردم بازم نشد. چون دو خروجی میخوام . نتیجه در پنجاه درصد مواقع اینطوری میشه
توی کدهایی که دادید چیز خاصی مشخص نمیشه
دو خروجی رو بیشتر توضیح بدید. دوبار همین اسکریپت با فایل یکسان اجرا میشه ؟
نه، یکبار اجرا میشه
توو خط شش و هفت ببینید $myfile در خط شش یک نتیجه میده و در خط هفت ی نتیجه کاملا جدا و مجزا...
AtrafNet
December 8th, 2016, 17:11
نه، یکبار اجرا میشه
توو خط شش و هفت ببینید $myfile در خط شش یک نتیجه میده و در خط هفت ی نتیجه کاملا جدا و مجزا...
از کل کد شما خبر ندارم و نمی دونم چرا برای شما این اتفاق میفته ولی یه راه ساده تر هست که اونم هش کردن اسم فایل اصلی (یعنی فایل مبدا که هنوز Watermark نخورده) با یه الگوریتم هش کوتاه مثلاً crc32 هستش چون معمولاً الگوریتم های Hash بر پایه ورودی که بهشون میدین نتیجه یکسانی هر بار میدن و به همین دلیل 10 بار هم اجراش کنید باز همون نتیجه رو میده و این مشکلی که الان دارید رو پیش نمیاره.
md5 و sh1 و... معمولاً خروجی هش طولانی دارن ولی crc32 هش کوتاه عددی برای شما بر می گردونه.
استفاده اش هم خیلی آسونه اینطوری:
خروجی همیشه یکسان کد بالا: 534215241 هستش یعنی بر طبق ورودی که به تابع crc32 میدید همیشه خروجی عددی یکسانی میگیرین ;)
ami-karimi
December 8th, 2016, 19:20
دقیقا نفهمیدم سوالتون رو
اگه میخواید نام یکسان باشه
قبل اپلود یک کوکی ایجاد کنید که دقیقه رو بگیره
و زمان اپلود نام رو برابر کوکی ایجاد شده قرار بدید
همین
samanmo
December 8th, 2016, 20:04
دقیقا نفهمیدم سوالتون رو
اگه میخواید نام یکسان باشه
قبل اپلود یک کوکی ایجاد کنید که دقیقه رو بگیره
و زمان اپلود نام رو برابر کوکی ایجاد شده قرار بدید
همین
سلام ، ممنونم
ببینید میخوام در هربار اجرای اسکریپت واترمارک یک نام تولید بشه ، به کد زیر دقت کنید
متغییر myfile در خط شش و هفت اومده . در خط شش نتیجه 443344 در خط هفت نتیجه 1223332
درحالیکه من میخوام یکسان باشن .
سلام ، ممنونم
ببینید میخوام در هربار اجرای اسکریپت واترمارک یک نام تولید بشه ، به کد زیر دقت کنید
متغییر myfile در خط شش و هفت اومده . در خط شش نتیجه 443344 در خط هفت نتیجه 1223332
درحالیکه من میخوام یکسان باشن .
بیشتر به نظر میرسه تابع watermark شما متغیر رو ادیت کنه یا اینکه اسکریپت به نحوی دوبار اجرا میشه چون در غیر این صورت چنین چیزی امکان پذیر نیست !
مقدار $myfile رو ثابت بزارید و ببینید چی echo میشه
$myfile = 'test.mp4';
ami-karimi
December 8th, 2016, 21:22
سلام ، ممنونم
ببینید میخوام در هربار اجرای اسکریپت واترمارک یک نام تولید بشه ، به کد زیر دقت کنید
متغییر myfile در خط شش و هفت اومده . در خط شش نتیجه 443344 در خط هفت نتیجه 1223332
درحالیکه من میخوام یکسان باشن .
سلام
شما همانطور که گفتم قبل از اینکه اصلا چیزی اپلود بشه
یک کوکی ست کنید یا یک سیشن
و درونش نامی که میخواید قرار بدید رو قرار بدید
زمانی که میخواد نام گذاری بشه فایل
به این شکل میشه کد شما
میخواید برای نام فایل اپلودی یه اسم بزاردی غیرتکرای!
بهترنی کار اینه که اول یه متقیر تعریف کنید به این صورت
$file_name = time().''.rand(100,999);
بعدش اپلود کنید و اسم فایلتون رو این متقیر بزارید
اینجوری هربار که اپلود کنید یه اسم منحصربه فرد دارید
miladtnt
December 8th, 2016, 22:04
دوستانی که رندم رو پیشنهاد میکنن باید بگم rand بر اساس microtime کار میکنه:)
microtime کاملتره و بجای دوتا تابع از یه تابع استفاده میشه
دوست عزیز شمام کدی که گذاشتید احتمالا یا همه کد نیست یا پشت پرده متغیرتون داره عوض میشه میتونید از متغیر های ثابت استفاده کنید از دستورات define استفاده کنید و تو اونا ذخیرع کنین عددو تا تغییر نکنه
اینم آموزشش
http://www.w3schools.com/php/func_misc_define.asp
samanmo
December 8th, 2016, 22:09
بنظرم یه قسمت از کد نزاشتین
میخواید برای نام فایل اپلودی یه اسم بزاردی غیرتکرای!
بهترنی کار اینه که اول یه متقیر تعریف کنید به این صورت
$file_name = time().''.rand(100,999);
بعدش اپلود کنید و اسم فایلتون رو این متقیر بزارید
اینجوری هربار که اپلود کنید یه اسم منحصربه فرد دارید
بله ، این اولین راهی بود که رفتم . الآن همین دو تابع که شما ریختید در یک متغییر . خب حالا $file_name رو باید بذارم نام فایل و همینطور اکو کنم که کاربر نام فایل آپلود شدش رو ببینه ، درسته؟
نتیجه یکسان نیست. یعنی اسم فایل آپلود شده با اسم فایل اکو شده برای کاربر فرق داره
Rezash
December 8th, 2016, 22:19
دوستانی که رندم رو پیشنهاد میکنن باید بگم rand بر اساس microtime کار میکنه:)
microtime کاملتره و بجای دوتا تابع از یه تابع استفاده میشه
دوست عزیز شمام کدی که گذاشتید احتمالا یا همه کد نیست یا پشت پرده متغیرتون داره عوض میشه میتونید از متغیر های ثابت استفاده کنید از دستورات define استفاده کنید و تو اونا ذخیرع کنین عددو تا تغییر نکنه
اینم آموزشش
http://www.w3schools.com/php/func_misc_define.asp
فرمایش شما صحیح هست. استفاده از یک تابع مزیتش سرعت بالاتر هست که خیلی مهم نیست در اینجا
اما استفاده از دو تابع باعث میشه که خروجی لزوما unixtimestamp نباشه و مقدار کمی ( کمی ) امنیت بیشتر بشه. البته اگر بحث امنیت باشه هیچ کدوم از این توابع امنیت کاملی ندارند و تضمین منحصر به فرد بودن رشته رو نمیدند و باید از روش های پیچیده تری استفاده کنیم
lizard.tiny
December 8th, 2016, 22:29
درود
اگه هدفتون این هست که هر بار فایل آپلود میکنید یک نام رندوم بگیره و موقع آپلود اگه در 1 ثانیه چند کاربر در حال آپلود هستند اختلالی در نام پیش نیاد بهتره اسم اصلی فایل رو با time ترکیب کنید و بصورت md5 کد کنید
مثلاً اگه اسم فایل milad.mp4 هست از کد زیر استفاده کنید :