اعتبارسنجی حداکثر حجم فایل را در لاراول PHP و Web-Server

گردآوری و تالیف : عرفان کاکایی
تاریخ انتشار : 30 مرداد 1397
دسته بندی ها : لاراول

بسیاری از افراد این مشکل را دارند که قانون حداکثر حجم فایل را برابر با مثلا ۲۰ مگابایت قرار می‌دهند، اما همچنان با خطاهایی مواجه می‌شوند. حال بیایید علت و راه حل آن را ببینیم.

در ابتدا نگاهی به نحوه اعتبار سنجی حجم فایل در لاراول خواهیم داشت. در فایل‌های درخواست فرم (Form Request) خود یا متد validate()، می‌توانید با این پارامتر، آرایه‌ها را منتقل کنید:

[
  'image' => 'required|mimes:jpeg,bmp,png|size:20000',
]

آخرین بخش، یعنی این که حجم فایل نباید بیش از ۲۰ مگابایت (۲۰۰۰۰ کیلوبایت) باشد. اما این کار کافی نیست؛ زیرا محدودیت فایل فقط در سطح برنامه‌های لاراول وجود دارد.

تنظیمات PHP در php.ini

دو تنظیمات مربوط به حداکثر حجم فایل در فایل php.ini وجود دارند. در اینجا، آن‌ها را با مقدار پیشفرضشان می‌بینید:

upload_max_filesize = 2M
post_max_size = 8M

همانطور که می‌توانید ببینید، به طور پیشفرض فقط می‌توانید فایل‌هایی با حداکثر حجم ۲ مگابایت ارسال کنید، پس باید آن را به ۲۰ مگابایت تغییر دهید. اما با توجه به محدودیت درخواست POST که با post_max_size تعیین شده است، حتی این کار نیز شما را قادر نخواهد ساخت تا بتوانید فایل‌هایی با حجم ۲۰ مگابایت آپلود کنید؛ بلکه باید post_max_size را برابر با ۲۰ مگابایت یا ترجیحا بیشتر قرار دهید. زیرا احتمالا خود POST داده‌هایی علاوه بر فایل را در خود خواهد داشت، پس در این مورد آن را برابر با ۲۱ مگابایت قرار می‌دهیم.

همچنین مطمئن شوید که فایل php.ini صحیح را ویرایش می‌کنید. زیرا مواردی وجود دارند که چندین فایل برای نسخه‌های مختلف PHP، و همچنین برای تنظیمات FPM و CLI بر روی یک سرور قرار دارند.

اما حتی این کار نیز ممکن است کافی نباشد؛ زیرا در طرف دیگر، تنظیمات وب‌سرور را داریم.

تنظیمات Nginx و Apache

لاراول به طور پیشفرض یک سرور با LEMP می‌سازد، که از Nginx به عنوان یک وب‌سرور استفاده می‌کند. حتی بدون این که بدانید چگونه آن را پیکربندی کنید، باید به یک تنظیمات در فایل nginx.comf بپردازید: client_max_body_size.

در اینجا، اسکرینشاتی از سند رسمی آن مشاهده می‌کنید:

همانطور که می‌توانید ببینید، مقدار پیشفرض تنها ۱ مگابایت است که یعنی کل درخواست POST شما نهایتا ۱ مگابایت حجم خواهد داشت. پس باید این تنظیمات را برابر با ۲۰ مگابایت یا بالاتر قرار دهید.

اگر از وب‌سرور آپاچی استفاده می‌کنید، تنظیمات دیگری به نام LimitRequestBody وجود دارد. در اینجا اسکرینشاتی از سند اصلی آن می‌بینید:

تفاوت در اینجا، این است که آپاچی به طور پیشفرض هیچ محدودیتی ندارد. پس شاید هیچ وقت نیاز به ویرایش این مقدار نداشته باشید. اما فقط محض اطلاع، خوب است که بدانید چنین گزینه‌ای وجود دارد.

منبع

مقالات پیشنهادی

آپلود چندتایی فایلها بصورت Ajax در لاراول 5

آپلود فایل‌ یکی از مهم‌ترین عملیات ها در محیط وب هست. امروزه سایز فایل‌ها برای آپلود بسیار بزرگ هستند و نیاز به فرآیندی داریم که در پنهان عملیات آپلود...

چرا لاراول بهترین فریمورک پی اچ پی است

لاراول یک فریم ورک رایگان با زبان php است که برای توسعه برنامه های کاربردی وب مورد استفاده قرار میگیره . این فریمورک متن باز بوده و از الگویی (model-v...

قوانین سفارشی اعتبارسنجی در لاراول 5.5

قوانین سفارشی اعتبارسنجی یکی از ویژگی های جدید لاراول در نسخه ی 5.5 هست, به ما کمک می کنه قوانین اعتبارسنجی رو طوری که می خواهیم داشته باشیم.

کم کردن حجم فایل های CSS - Javascript

با سلام خدمت دوستان در این مقاله طریقه ی فشرده سازی فایل های Css - javascript رو خدمتتون آموزش خواهم داد . هنگامی که شما چندین خط کد برای وب سایتتون م...