cPanel و WHM

تغییر نسخه PHP در cPanel و افزایش memory_limit و حجم آپلود

تغییر نسخه PHP در cPanel از بخش MultiPHP Manager انجام می شود و مقدارهایی مثل memory_limit و upload_max_filesize را از MultiPHP INI Editor عوض می کنید. اگر خطای Allowed memory size یا پیام حجم آپلود می بینید، معمولا یکی از همین دو بخش مشکل را حل می کند.

نوشته تیم فنی پیکوهاستبه روزرسانی: ۱۲ مهر ۱۴۰۵۸ دقیقه مطالعه

تغییر نسخه PHP در cPanel چند کلیک بیشتر نیست، ولی اگر پیش از آن نسخه جدید با قالب و افزونه های سایت سازگار نباشد، نتیجه صفحه سفید یا خطای 500 است. افزایش memory_limit و حجم آپلود هم از یک صفحه دیگر انجام می شود و معمولا چند دقیقه بعد اثر می کند. در این مقاله هر دو کار، روش بررسی اثر تغییر و خطاهایی که بعدش می بینید آمده است.

پیش از تغییر چه چیزی را بررسی کنید

سه کار کوتاه ریسک را پایین می آورد.

  1. از فایل ها و دیتابیس بکاپ بگیرید. روش کار در بکاپ گیری و بازیابی سایت در cPanel آمده است.
  2. نسخه فعلی را بدانید. در وردپرس از Tools و بعد Site Health و تب Info، بخش Server نسخه PHP و مقدار memory_limit را نشان می دهد.
  3. سازگاری قالب و افزونه ها را چک کنید. صفحه هر افزونه در wordpress.org بخش «Requires PHP» دارد. افزونه ای که سال ها به روز نشده، اولین مشکوک است.

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

تغییر نسخه PHP در cPanel با MultiPHP Manager

این بخش روی هاست هایی که از EasyApache 4 استفاده می کنند وجود دارد. مراحل:

  1. وارد cPanel شوید و در بخش Software گزینه MultiPHP Manager را باز کنید.
  2. در فهرست دامنه ها، تیک دامنه یا ساب دامین مورد نظر را بزنید.
  3. از منوی PHP Version نسخه را انتخاب کنید و روی Apply کلیک کنید.

نسخه برای هر دامنه جدا ذخیره می شود. یعنی سایت اصلی می تواند روی یک نسخه باشد و ساب دامین آزمایشی روی نسخه ای دیگر. فهرست نسخه های موجود را هاست تعیین می کند و اگر نسخه ای را نمی بینید، باید از پشتیبانی بخواهید آن را فعال کند.

اگر هاست شما CloudLinux است، گزینه ای به نام Select PHP Version هم در همان بخش Software می بینید. این ابزار علاوه بر نسخه، دو تب دیگر دارد: Extensions برای روشن و خاموش کردن اکستنشن هایی مثل intl، imagick یا mbstring و Options برای مقدارهای ini. روی هر هاست یکی از این دو ابزار نسخه را مدیریت می کند و بهتر است از همان یکی استفاده کنید تا تنظیم ها با هم تداخل نکنند.

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

افزایش memory_limit و حجم آپلود با MultiPHP INI Editor

برای مقدارهای ini ابزار اصلی در cPanel، MultiPHP INI Editor است و آن را هم در بخش Software پیدا می کنید. دو حالت دارد.

در Basic Mode بالای صفحه یک منو برای انتخاب محل تنظیم هست: پوشه Home یا یکی از دامنه ها. بعد از انتخاب، فهرستی از مقدارهای رایج را با فیلد یا منوی کشویی می بینید. مقدار جدید را وارد کنید و Apply را بزنید. در Editor Mode محتوای خود فایل ini را می بینید و می توانید خط اضافه کنید، مثل:

memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300
max_input_vars = 3000

عددهای بالا مثال اند. مقدار پیش فرض و سقف مجاز را هاست تعیین می کند و روی هر سرویس فرق دارد. جدول زیر معنی هر مقدار را نشان می دهد:

مقدارکاربردنکته
memory_limitسقف رم هر درخواست PHPبا خطای Allowed memory size به آن می رسید
upload_max_filesizeسقف حجم هر فایل آپلودیباید از post_max_size کوچک تر یا مساوی باشد
post_max_sizeسقف کل داده یک درخواست POSTاگر از upload_max_filesize کمتر باشد، آپلود بی صدا شکست می خورد
max_execution_timeسقف زمان اجرای یک اسکریپت بر حسب ثانیهبرای ایمپورت و بکاپ افزونه ها لازم می شود
max_input_varsتعداد فیلدهایی که PHP از یک فرم می پذیردمنوها و تنظیمات بزرگ وردپرس با عدد کم ذخیره نمی شوند

ترتیب منطقی این است: memory_limit از post_max_size بزرگ تر باشد و post_max_size از upload_max_filesize کوچک تر نباشد. اگر فقط upload_max_filesize را بالا ببرید و post_max_size را دست نزنید، حجم مجاز همان عدد کوچک تر می ماند.

روش های دیگر: user.ini، htaccess و wp-config

اگر به MultiPHP INI Editor دسترسی ندارید یا می خواهید تنظیم فقط برای یک پوشه باشد، چند راه دیگر هست و کدام کار می کند به نوع اجرای PHP بستگی دارد.

فایل .user.ini در PHP-FPM و CGI کار می کند. آن را در پوشه ای که اسکریپت در آن است یا در ریشه سایت بسازید و همان خط ها را بنویسید:

memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M

PHP این فایل را هر چند دقیقه یک بار دوباره می خواند، پس اثرش فوری نیست. اگر سقف مجاز هاست پایین تر از مقدار شما باشد، مقدار شما نادیده گرفته می شود.

دستور php_value در .htaccess فقط وقتی کار می کند که PHP به صورت ماژول Apache یا روی LiteSpeed اجرا شود. روی PHP-FPM همین خط باعث خطای 500 می شود. اگر بعد از ویرایش htaccess سایت 500 داد، فایل را از بکاپ برگردانید و راهنمای رفع خطای 500 در cPanel را ببینید.

در وردپرس، سقف حافظه را می توان در wp-config.php هم تعیین کرد. این خط را بالای عبارت «That's all, stop editing» قرار دهید:

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

این مقدار فقط حافظه ای را که وردپرس درخواست می کند تعیین می کند. اگر memory_limit سرور از آن کمتر باشد، سقف همان مقدار سرور می ماند.

چطور مطمئن شویم تغییر اعمال شده

نشان دادن مقدار واقعی از خود PHP مطمئن ترین روش است. یک فایل با نام info.php در ریشه سایت بسازید:

<?php phpinfo();

آدرس https://example.com/info.php را باز کنید و دنبال memory_limit و upload_max_filesize بگردید. ستون Local Value مقدار فعال برای همین پوشه است. بالای صفحه هم نسخه PHP و خط Loaded Configuration File را می بینید. بعد از بررسی فایل را پاک کنید، چون اطلاعات سرور را برای هر کسی که آدرس را بداند نشان می دهد.

اگر به Terminal هاست دسترسی دارید، دستور زیر نسخه و مقدارهای CLI را نشان می دهد:

php -v
php -i | grep -E "memory_limit|upload_max_filesize|post_max_size"

مقدار CLI با مقدار وب می تواند فرق داشته باشد و فقط برای کارهای خط فرمان مثل کران معتبر است. برای مقدار سایت همیشه خروجی phpinfo() را معیار قرار دهید.

برای وردپرس، صفحه Media و بعد Add New زیر کادر آپلود عبارت «Maximum upload file size» را نشان می دهد و مقدار آن باید با تنظیم جدید یکی باشد.

خطاهای رایج بعد از تغییر

خطاعلت محتملراه حل
Allowed memory size of 134217728 bytes exhaustedmemory_limit کم است یا افزونه ای رم زیادی مصرف می کندمقدار را بالا ببرید و اگر خطا برگشت، افزونه مصرف کننده را با غیرفعال کردن تک تک پیدا کنید
The uploaded file exceeds the upload_max_filesize directiveupload_max_filesize کم استهر دو مقدار upload_max_filesize و post_max_size را بالا ببرید
Maximum execution time of 30 seconds exceededاسکریپت طولانی استmax_execution_time را بالا ببرید یا کار را قسمت کنید
ذخیره نشدن منو یا تنظیمات قالبmax_input_vars کم استمقدار را مثلا به 3000 برسانید
صفحه سفید یا خطای 500 بعد از ارتقاقالب یا افزونه با نسخه جدید سازگار نیستفایل error_log را بخوانید و نسخه را به قبلی برگردانید
Call to undefined functionاکستنشن لازم در نسخه جدید روشن نیستاز Select PHP Version در تب Extensions آن را فعال کنید

عدد 134217728 همان 128 مگابایت است و پیام خطا مقدار فعلی را به بایت می نویسد. پس با دیدن آن می فهمید سقف فعلی چقدر بوده است.

روی هاست اشتراکی، بالا بردن memory_limit بی حساب هم مشکل می سازد. هر درخواست می تواند تا آن سقف رم بگیرد و وقتی چند درخواست هم زمان باشد، حساب شما به سقف منابع می رسد و خطای 508 می گیرد. اگر بعد از تغییر این خطا را دیدید، آموزش رفع Resource Limit Reached را بخوانید. بیشتر سایت های وردپرس با 256 مگابایت هم مشکلی ندارند و فروشگاه های بزرگ تر هم اغلب با کش و حذف افزونه اضافه بهتر از رم بیشتر جواب می گیرند، که در بهینه سازی سرعت ووکامرس آمده است.

پیشنهاد برای سایت های وردپرسی

نسخه PHP را روی نسخه ای نگه دارید که هنوز پشتیبانی امنیتی می شود. نسخه های قدیمی PHP دیگر وصله امنیتی نمی گیرند و فهرست نسخه های پشتیبانی شده را در سایت رسمی PHP می بینید. برای وردپرس هم لیست نسخه های توصیه شده در wordpress.org هست. مشخصات کامل بخش های cPanel را در مستندات رسمی cPanel پیدا می کنید.

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