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 و حجم آپلود هم از یک صفحه دیگر انجام می شود و معمولا چند دقیقه بعد اثر می کند. در این مقاله هر دو کار، روش بررسی اثر تغییر و خطاهایی که بعدش می بینید آمده است.
پیش از تغییر چه چیزی را بررسی کنید
سه کار کوتاه ریسک را پایین می آورد.
- از فایل ها و دیتابیس بکاپ بگیرید. روش کار در بکاپ گیری و بازیابی سایت در cPanel آمده است.
- نسخه فعلی را بدانید. در وردپرس از Tools و بعد Site Health و تب Info، بخش Server نسخه PHP و مقدار memory_limit را نشان می دهد.
- سازگاری قالب و افزونه ها را چک کنید. صفحه هر افزونه در wordpress.org بخش «Requires PHP» دارد. افزونه ای که سال ها به روز نشده، اولین مشکوک است.
اگر سایت پرتردد است، تغییر را در ساعت کم ترافیک انجام دهید. اگر امکانش را دارید، یک کپی از سایت روی ساب دامین بسازید، نسخه را فقط برای همان ساب دامین عوض کنید و بعد سراغ سایت اصلی بروید.
تغییر نسخه PHP در cPanel با MultiPHP Manager
این بخش روی هاست هایی که از EasyApache 4 استفاده می کنند وجود دارد. مراحل:
- وارد cPanel شوید و در بخش Software گزینه MultiPHP Manager را باز کنید.
- در فهرست دامنه ها، تیک دامنه یا ساب دامین مورد نظر را بزنید.
- از منوی 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 exhausted | memory_limit کم است یا افزونه ای رم زیادی مصرف می کند | مقدار را بالا ببرید و اگر خطا برگشت، افزونه مصرف کننده را با غیرفعال کردن تک تک پیدا کنید |
The uploaded file exceeds the upload_max_filesize directive | upload_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 مقصد را قبل از انتقال با نسخه مبدا یکی کنید، همان طور که در راهنمای انتقال سایت وردپرس توضیح داده شده است.