پرش به محتوا
پیکربندی

افزایش محدودیت حجم آپلود در وردپرس (روی هر هاستی)

محدودیت فعلی آپلود وردپرس را بررسی کنید و آن را در جای درست برای هاست خود افزایش دهید: php.ini، .user.ini، .htaccess، cPanel، Nginx یا Cloudflare.

منتشرشده به‌روزشده

برای افزایش محدودیت آپلود در وردپرس، دو تنظیم PHP یعنی upload_max_filesize و post_max_size را در فایل پیکربندی‌ای که هاست شما واقعا می‌خواند بالا ببرید. این فایل روی سروری که خودتان مدیریت می‌کنید php.ini است، روی بیشتر هاست‌های اشتراکی که PHP-FPM یا FastCGI اجرا می‌کنند .user.ini، فقط وقتی Apache زبان PHP را به‌صورت ماژول اجرا می‌کند .htaccess، یا MultiPHP INI Editor در cPanel. اگر سرور شما با Nginx کار می‌کند، client_max_body_size را هم افزایش دهید. ویرایش wp-config.php محدودیت آپلود را تغییر نمی‌دهد.

ابزار حداکثر حجم آپلود وردپرس یک حجم هدف را به مقادیر متناظر برای php.ini (یا .user.ini)، .htaccess و wp-config.php تبدیل می‌کند تا به جای تایپ دستی، آن‌ها را جای‌گذاری کنید.

مرحله 1: محدودیت فعلی آپلود را بررسی کنید

پیش از هر تغییری، ببینید محدودیت الان چقدر است و کدام تنظیم آن را تعیین می‌کند.

  • رسانه > افزودن. صفحه آپلود حداکثر حجم فایل را نشان می‌دهد. این همان عددی است که می‌خواهید بالا ببرید.
  • ابزارها > سلامت سایت > اطلاعات. بخش مدیریت رسانه را گسترش دهید. مستندات سلامت سایت آنچه را آنجا نمایش داده می‌شود فهرست می‌کند: حداکثر حجم مجاز داده‌های POST، حداکثر حجم فایل آپلودی و حداکثر حجم مؤثر فایل، که کوچک‌ترِ این دو است. بخش سرور مقادیر بیشتری از PHP نشان می‌دهد.
صفحه Upload Media وردپرس با خط Maximum upload file size: 2 GB زیر ناحیه آپلود
جایی که سقف در صفحه آپلود دیده می‌شود: زیر ناحیه آپلود. مقدار 2 GB مربوط به سرور آزمایشی ماست؛ بسیاری از هاست‌ها مقدار بسیار کمتری می‌گذارند.
بخش Media Handling در Site Health Info وردپرس با فهرست max size of post data allowed، max size of an uploaded file و max effective file size
Tools > Site Health > Info > Media Handling در سایت آزمایشی ما، که سقف post data، فایل آپلودی و سقف مؤثر را در ردیف‌های جدا نشان می‌دهد.

وردپرس محدودیت خود را در تابع wp_max_upload_size() حساب می‌کند که upload_max_filesize و post_max_size را از PHP می‌خواند و کوچک‌تر را برمی‌دارد. اگر یکی 64M و دیگری 8M باشد، محدودیت شما 8M است.

مرحله 2: بدانید کدام تنظیمات مهم‌اند

تنظیمچه چیزی را محدود می‌کندپیش‌فرض PHPکجا قابل تغییر است
upload_max_filesizeبزرگ‌ترین فایل تکی آپلودشده2Mphp.ini، .user.ini، .htaccess، httpd.conf
post_max_sizeکل درخواست POST، همراه با فایل8Mphp.ini، .user.ini، .htaccess، httpd.conf
memory_limitحافظه‌ای که PHP هنگام اجرا می‌تواند مصرف کند128Mهمه‌جا، از جمله wp-config.php
max_execution_timeثانیه‌هایی که یک اسکریپت می‌تواند اجرا شود30همه‌جا، از جمله wp-config.php
client_max_body_size (Nginx)بدنه درخواستی که Nginx می‌پذیرد1mفقط در پیکربندی Nginx

مقادیر پیش‌فرض PHP و حالت‌های تغییر آن‌ها از فهرست دستورهای php.ini آمده و مقدار پیش‌فرض Nginx از مستندات ماژول core در Nginx. بیشتر هاست‌ها مقادیری بالاتر از پیش‌فرض‌های PHP می‌گذارند، به همین دلیل اعداد واقعی خود را باید در سلامت سایت بخوانید.

upload_max_filesize و post_max_size همان چیزی هستند که PHP تنظیمات INI_PERDIR می‌نامد: «می‌توان آن‌ها را در php.ini، .htaccess، httpd.conf یا .user.ini تنظیم کرد» و نه هیچ جای دیگر. memory_limit حجم فایل را محدود نمی‌کند، اما وردپرس برای ساختن نسخه‌های کوچک‌شده تصاویر بزرگ به حافظه نیاز دارد، پس یک آپلود بزرگ ممکن است بعد از رسیدن با خطای تمام شدن حافظه شکست بخورد.

مرحله 3: محدودیت را در جای درست برای هاست خود افزایش دهید

نوع سرور شماکجا تنظیم کنیدنکته‌ها
سرور مجازی (VPS) یا اختصاصیهمان php.ini که PHP شما واقعا بارگذاری می‌کندبعد از آن PHP-FPM یا Apache را ری‌استارت کنید
هاست اشتراکی با PHP-FPM یا FastCGI.user.ini در پوشه اصلی وردپرساعمال شدنش ممکن است تا 5 دقیقه طول بکشد
Apache با PHP به‌صورت ماژول (mod_php).htaccess با php_valueزیر PHP-FPM یا FastCGI خطای 500 ایجاد می‌کند
هاست cPanelSoftware > MultiPHP INI Editorphp.ini، .user.ini یا .htaccess را برایتان می‌نویسد
Nginx جلوی PHPclient_max_body_size در کنار مقادیر PHPدر غیر این صورت Nginx خطای 413 برمی‌گرداند
هاست وردپرس مدیریت‌شدهپنل یا پشتیبانی هاستبسیاری از هاست‌ها آپلود را در سطح پلتفرم محدود می‌کنند
سایت پشت Cloudflareمحدودیت آپلود خود Cloudflare100 MB در پلن‌های Free و Pro

php.ini (سروری که خودتان مدیریت می‌کنید)

اول فایل بارگذاری‌شده را پیدا کنید. یک فایل موقت با محتوای <?php phpinfo(); بسازید، آن را در مرورگر باز کنید، خط «Loaded Configuration File» را بخوانید و بعد فایل را پاک کنید. همان php.ini را ویرایش کنید:

upload_max_filesize = 128M
post_max_size = 130M
max_execution_time = 300

سپس PHP را ری‌استارت کنید تا تغییر را بخواند. در PHP-FPM نام سرویس شامل نسخه است، برای مثال sudo systemctl restart php8.3-fpm روی Debian یا Ubuntu. با mod_php، Apache را ری‌استارت کنید.

.user.ini (بیشتر هاست‌های اشتراکی)

PHP فایل‌های .user.ini را فقط وقتی می‌خواند که به‌صورت CGI یا FastCGI اجرا شود، که PHP-FPM را هم شامل می‌شود. فایل .user.ini را در پوشه‌ای که wp-config.php در آن است بسازید یا ویرایش کنید:

upload_max_filesize = 128M
post_max_size = 130M

PHP این فایل‌ها را هر user_ini.cache_ttl ثانیه دوباره می‌خواند که پیش‌فرض آن 300 است. پیش از اینکه نتیجه بگیرید کار نکرده، پنج دقیقه صبر کنید، یا اگر می‌توانید PHP-FPM را ری‌استارت کنید.

.htaccess (فقط Apache با mod_php)

php_value upload_max_filesize 128M
php_value post_max_size 130M

راهنمای PHP این دستورها را برای PHP که به‌صورت ماژول Apache اجرا می‌شود توضیح می‌دهد. اگر سایت شما بلافاصله بعد از ذخیره خطای 500 Internal Server Error نشان داد، PHP به‌صورت FastCGI یا PHP-FPM اجرا می‌شود. خط‌ها را حذف کنید و به جای آن از .user.ini استفاده کنید.

MultiPHP INI Editor در cPanel

در cPanel بخش Software > MultiPHP INI Editor را باز کنید، دامنه خود را انتخاب کنید و مقادیر را در Basic Mode تغییر دهید. طبق مستندات cPanel، حالت Basic Mode مقادیر را در فایل‌های php.ini، .user.ini و .htaccess، هر جا که آن تنظیم پشتیبانی شود، ذخیره می‌کند، پس لازم نیست بدانید سرور شما از کدام استفاده می‌کند.

Nginx

Nginx حجم درخواست را پیش از اینکه PHP آن را ببیند بررسی می‌کند. وقتی درخواستی از client_max_body_size بزرگ‌تر باشد، Nginx خطای 413 Request Entity Too Large برمی‌گرداند. مقدار پیش‌فرض 1m است. در بلوک server مقداری دست‌کم برابر با post_max_size اضافه کنید:

client_max_body_size 130M;

با sudo nginx -t && sudo systemctl reload nginx تست و بارگذاری مجدد کنید. در Apache تنظیم مشابه LimitRequestBody است که در هاست‌های معمولی وردپرس به‌ندرت نیاز به تغییر دارد.

هاست‌های مدیریت‌شده و Cloudflare

برخی هاست‌های وردپرس مدیریت‌شده php.ini یا .user.ini شما را نادیده می‌گیرند و محدودیت را برای کل پلتفرم تعیین می‌کنند. اگر بعد از تغییر، سلامت سایت هنوز عدد قدیمی را نشان می‌دهد، از هاست خود بپرسید حداکثر چقدر است و آیا می‌توانند آن را افزایش دهند.

اگر سایت از Cloudflare عبور می‌کند، Cloudflare محدودیت خودش را دارد. مستندات کش آن حداکثر حجم آپلود را 100 MB در پلن‌های Free و Pro، 200 MB در Business و تا 5 GB در Enterprise ذکر می‌کند. هیچ تنظیم PHP نمی‌تواند از این عبور کند.

چرا wp-config.php کار نمی‌کند

بسیاری از مقاله‌ها پیشنهاد می‌کنند این را به wp-config.php اضافه کنید:

@ini_set( 'upload_max_filesize', '128M' );
@ini_set( 'post_max_size', '130M' );

هر دو تنظیم INI_PERDIR هستند و مستندات PHP می‌گوید تنظیمات این حالت را نمی‌توان با ini_set() تعیین کرد. علامت @ شکست را پنهان می‌کند، پس خط‌ها بی‌خطر به نظر می‌رسند و هیچ چیزی را تغییر نمی‌دهند. چیزی که wp-config.php می‌تواند تغییر دهد حافظه است، چون memory_limit را همه‌جا می‌توان تنظیم کرد:

define( 'WP_MEMORY_LIMIT', '256M' );

این کار وقتی تصاویر بزرگ هنگام پردازش شکست می‌خورند کمک می‌کند. اما حداکثر حجم فایل آپلود را تغییر نمی‌دهد.

مرحله 4: تغییر را تأیید کنید

صفحه رسانه > افزودن را دوباره بارگذاری کنید و ببینید حداکثر حجم فایل مقدار جدید شما را نشان می‌دهد یا نه. اگر نشان نمی‌دهد:

  • بررسی کنید post_max_size دست‌کم به اندازه upload_max_filesize باشد. وردپرس کوچک‌تر را استفاده می‌کند.
  • مطمئن شوید فایلی را ویرایش کرده‌اید که PHP واقعا بارگذاری می‌کند. php.ini در پوشه اشتباه نادیده گرفته می‌شود.
  • بعد از تغییر .user.ini پنج دقیقه صبر کنید یا PHP-FPM را ری‌استارت کنید.
  • اگر عدد در وردپرس تغییر کرده اما آپلودها هنوز با 413 شکست می‌خورند، مانع در Nginx، پراکسی هاست یا Cloudflare است.
  • اگر فایل به وردپرس می‌رسد و بعد با «خطای HTTP» شکست می‌خورد، دیگر مشکل از حجم نیست. راهنمای ما درباره خطای HTTP وردپرس هنگام آپلود تصویر علت‌های رایج را توضیح می‌دهد.

محدودیت را چقدر بالا ببرید؟

آن را روی بزرگ‌ترین فایلی که واقعا لازم دارید آپلود کنید، با کمی فضای اضافه، تنظیم کنید و post_max_size را کمی بالاتر از upload_max_filesize نگه دارید. آپلودهای بزرگ زمان بیشتری هم می‌برند، پس اگر فایل‌های بزرگ روی اتصال‌های کند به پایان مهلت می‌رسند، max_execution_time را افزایش دهید. برای فایل‌های خیلی بزرگ مثل ویدیوهای طولانی یا آرشیوهای پشتیبان، آپلود از طریق SFTP یا با افزونه آپلود تکه‌تکه معمولا از یک آپلود عظیم در مرورگر قابل‌اعتمادتر است، و ممکن است محدودیت پلن Cloudflare مسیر مرورگر را از قبل منتفی کند.

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

FAQ

پرسش‌ها

چطور محدودیت فعلی آپلود را در وردپرس بررسی کنم؟

به رسانه > افزودن بروید. صفحه آپلود حداکثر حجم فایل را نشان می‌دهد. برای جزئیات بیشتر، ابزارها > سلامت سایت > اطلاعات را باز کنید و بخش مدیریت رسانه را گسترش دهید. آنجا حداکثر حجم فایل آپلودی، حداکثر حجم داده‌های POST و حداکثر حجم مؤثر فایل، یعنی کوچک‌ترِ این دو، نمایش داده می‌شود.

چرا وردپرس می‌گوید فایل آپلودشده از دستور upload_max_filesize در php.ini بزرگ‌تر است؟

فایل از تنظیم upload_max_filesize در PHP بزرگ‌تر است. وردپرس این محدودیت را تعیین نمی‌کند، بلکه آن را از PHP می‌خواند. upload_max_filesize و post_max_size را با هم در php.ini، .user.ini یا، روی Apache با mod_php، در .htaccess افزایش دهید. مقدار پیش‌فرض خود PHP برای upload_max_filesize فقط 2M است، هرچند بیشتر هاست‌ها مقدار بالاتری می‌گذارند.

آیا می‌توانم محدودیت آپلود را از wp-config.php افزایش دهم؟

نه. upload_max_filesize و post_max_size تنظیمات PHP_INI_PERDIR هستند که PHP فقط از php.ini، .htaccess، httpd.conf یا .user.ini می‌پذیرد. یک خط ini_set() در wp-config.php بدون خطا اجرا می‌شود و هیچ چیزی را تغییر نمی‌دهد. wp-config.php می‌تواند محدودیت حافظه وردپرس را بالا ببرد، اما حافظه چیزی نیست که حجم فایل را محدود کند.

چرا بعد از افزایش محدودیت‌های PHP هنوز خطای 413 Request Entity Too Large می‌گیرم؟

چیزی قبل از PHP درخواست را رد می‌کند. در Nginx این کار را client_max_body_size انجام می‌دهد که مقدار پیش‌فرضش 1m است و با عبور از آن خطای 413 برمی‌گرداند. آن را در بلوک server افزایش دهید و Nginx را دوباره بارگذاری کنید. اگر سایت شما از Cloudflare عبور می‌کند، محدودیت آپلود پلن آن هم می‌تواند درخواست را پیش از رسیدن به سرور متوقف کند.

آیا post_max_size باید بزرگ‌تر از upload_max_filesize باشد؟

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