چرا تنظیمات PHP برای سایت شما حیاتی است؟
بسیاری از سایتهای وردپرسی، جوملا و سایر سیستمهای مدیریت محتوا بر پایه PHP اجرا میشوند. اگر تا به حال با خطای Fatal Error: Allowed Memory Size Exhausted یا Upload: Failed to Write File to Disk مواجه شدهاید، ریشه مشکل در تنظیمات PHP نادرست است. در این مقاله، به صورت عملی و با ذکر مثالهای واقعی، نحوه تغییر نسخه PHP، افزایش محدودیت حافظه (memory_limit) و حجم آپلود (upload_max_filesize) و فعالسازی اکستنشنهای ضروری را آموزش میدهیم. این راهنما برای کاربران هاست اشتراکی (cPanel یا DirectAdmin) و سرور مجازی (VPS) کاربرد دارد.
تغییر نسخه PHP: چرا و چگونه؟
هر نسخه PHP دارای ویژگیها، بهبودهای امنیتی و سازگاری متفاوت است. برای مثال، وردپرس نسخه ۶ به PHP 7.4 یا بالاتر نیاز دارد. اگر از اسکریپتهای قدیمی استفاده میکنید، ممکن است با نسخههای جدیدتر دچار خطا شوید. در ادامه دو روش رایج را بررسی میکنیم.
تغییر نسخه PHP در هاست اشتراکی (cPanel)
- وارد cPanel حساب خود شوید.
- به بخش Software رفته و گزینه Select PHP Version را انتخاب کنید.
- از منوی کشویی، نسخه مورد نظر (مثلاً
8.1یا8.2) را انتخاب کنید. - روی Set as current کلیک کنید.
- در همین صفحه میتوانید اکستنشنهای فعال را تیک بزنید یا بردارید.
نکته مهم: اگر سایت شما از کدهای قدیمی استفاده میکند، ابتدا در محیط آزمایشگاهی (staging) تست کنید. تغییر ناگهانی نسخه PHP ممکن است باعث نمایش صفحه سفید (White Screen of Death) شود.
تغییر نسخه PHP در سرور مجازی (VPS) با Nginx
در سرورهای مجازی که از Nginx و PHP-FPM استفاده میکنید، باید فایل کانفیگ سایت را ویرایش کنید. فرض کنید نسخه فعلی PHP 7.4 است و میخواهید به PHP 8.1 مهاجرت کنید:
# ابتدا نسخه جدید را نصب کنید (در Ubuntu/Debian)
sudo apt update
sudo apt install php8.1-fpm php8.1-mysql php8.1-xml php8.1-mbstring
# سپس فایل کانفیگ سایت را ویرایش کنید
sudo nano /etc/nginx/sites-available/example.com
# خط زیر را پیدا کرده و نسخه را تغییر دهید:
# fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
# به:
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
# پس از ذخیره، Nginx را ریاستارت کنید
sudo systemctl restart nginx
sudo systemctl restart php8.1-fpm
اشتباه رایج: فراموش نکنید که پس از تغییر، سرویس PHP-FPM جدید را فعال کنید (sudo systemctl enable php8.1-fpm) و سرویس قدیمی را غیرفعال نمایید.
افزایش memory_limit و upload_max_filesize
دو پارامتر کلیدی در تنظیمات PHP که مستقیماً روی عملکرد سایت تأثیر میگذارند، memory_limit و upload_max_filesize هستند. خطاهای رایج مانند Allowed Memory Size Exhausted معمولاً به دلیل مقدار کم memory_limit رخ میدهد.
روش اول: ویرایش فایل php.ini (دسترسی روت)
اگر به سرور دسترسی روت دارید، فایل php.ini را پیدا کنید. مسیر معمول در Ubuntu/Debian:
sudo nano /etc/php/8.1/fpm/php.ini
سپس مقادیر زیر را جستجو و تغییر دهید:
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 68M # باید کمی بیشتر از upload_max_filesize باشد
max_execution_time = 300
max_input_time = 300
پس از ذخیره، سرویس PHP-FPM را ریاستارت کنید:
sudo systemctl restart php8.1-fpm
روش دوم: استفاده از فایل .htaccess (هاست اشتراکی)
در هاستهای اشتراکی که دسترسی به php.ini ندارید، میتوانید از فایل .htaccess استفاده کنید. این روش برای Apache کاربرد دارد:
# افزایش memory_limit
php_value memory_limit 256M
# افزایش حجم آپلود
php_value upload_max_filesize 64M
php_value post_max_size 68M
# افزایش زمان اجرا
php_value max_execution_time 300
این خطوط را به انتهای فایل .htaccess در ریشه سایت اضافه کنید. اگر فایل وجود ندارد، آن را ایجاد کنید.
اشتباه رایج: برخی کاربران post_max_size را کمتر از upload_max_filesize تنظیم میکنند که باعث خطای آپلود میشود. همیشه post_max_size را ۲ تا ۴ مگابایت بیشتر از upload_max_filesize قرار دهید.
روش سوم: استفاده از فایل wp-config.php (وردپرس)
در وردپرس میتوانید مستقیماً در فایل wp-config.php تنظیمات را اعمال کنید. این خطوط را قبل از خط /* That's all, stop editing! */ اضافه کنید:
define('WP_MEMORY_LIMIT', '256M');
define('WP_MAX_MEMORY_LIMIT', '512M'); // برای صفحات مدیریت
این روش فقط روی وردپرس تأثیر دارد و برای سایر اسکریپتها کار نمیکند.
فعالسازی اکستنشنهای ضروری PHP
بسیاری از خطاهای نصب افزونهها یا قالبها به دلیل غیرفعال بودن اکستنشنهای PHP است. در ادامه مهمترین اکستنشنها را معرفی میکنیم.
اکستنشنهای رایج برای وردپرس و جوملا
- mysqli: برای اتصال به پایگاه داده MySQL/MariaDB.
- curl: برای ارتباط با APIهای خارجی و بهروزرسانی خودکار.
- gd یا imagick: برای پردازش تصاویر (تولید thumbnail، تغییر اندازه).
- mbstring: برای پشتیبانی از کاراکترهای چندبایتی (فارسی، عربی).
- xml و simplexml: برای پردازش فیدهای RSS و XML.
- zip: برای نصب افزونهها و قالبها از طریق آپلود فایل ZIP.
- openssl: برای اتصالات امن (SSL/TLS).
فعالسازی اکستنشن در cPanel
در Select PHP Version، پس از انتخاب نسخه PHP، لیست اکستنشنها را مشاهده میکنید. تیک اکستنشنهای مورد نیاز را بزنید و روی Save کلیک کنید. معمولاً نیازی به ریاستارت نیست.
فعالسازی اکستنشن در سرور مجازی (خط فرمان)
برای نصب اکستنشن در Ubuntu/Debian:
sudo apt install php8.1-curl php8.1-gd php8.1-mbstring php8.1-xml php8.1-zip
sudo systemctl restart php8.1-fpm
برای بررسی اکستنشنهای فعال، یک فایل info.php با محتوای زیر ایجاد کنید:
<?php
phpinfo();
?>
سپس آن را در مرورگر باز کنید و بخش Loaded Configuration File و Extensions را بررسی کنید. پس از اتمام کار، حتماً این فایل را حذف کنید تا اطلاعات سرور فاش نشود.
عیبیابی خطاهای رایج تنظیمات PHP
در این بخش به رایجترین خطاها و راهحلهای آنها میپردازیم.
خطای "Fatal Error: Allowed Memory Size of X Bytes Exhausted"
این خطا نشان میدهد که memory_limit کافی نیست. مقدار پیشفرض معمولاً ۳۲M یا ۶۴M است. آن را به ۱۲۸M یا ۲۵۶M افزایش دهید. اگر مشکل حل نشد، ممکن است یک افزونه یا قالب مشکلدار حافظه را مصرف کند.
خطای "Upload: Failed to Write File to Disk"
این خطا معمولاً به دلیل کم بودن upload_max_filesize یا post_max_size رخ میدهد. همچنین ممکن است پوشه /tmp پر شده باشد. با دستور df -h فضای دیسک را بررسی کنید.
خطای "Headers Already Sent"
این خطا زمانی رخ میدهد که قبل از تابع header() خروجی (مانند فاصله یا BOM) ارسال شده باشد. فایلهای PHP را با ویرایشگر مناسب (مانند VS Code یا Notepad++) ذخیره کنید و از BOM (Byte Order Mark) استفاده نکنید.
نکات امنیتی در تنظیمات PHP
پس از اعمال تنظیمات PHP، حتماً موارد امنیتی زیر را رعایت کنید:
- غیرفعال کردن نمایش خطاها در محیط تولید: در فایل
php.iniمقدارdisplay_errors = Offوlog_errors = Onرا تنظیم کنید. - محدود کردن تابعهای خطرناک: با استفاده از
disable_functionsتوابعی مانندexec()،system()وshell_exec()را غیرفعال کنید. - استفاده از open_basedir: دسترسی PHP به دایرکتوریهای خاص را محدود کنید.
برای اعمال این تنظیمات در هاست اشتراکی، معمولاً باید با پشتیبانی تماس بگیرید. در سرور مجازی، میتوانید مستقیماً php.ini را ویرایش کنید.
جمعبندی
در این مقاله، نحوه تغییر نسخه PHP، افزایش memory_limit و upload_max_filesize و فعالسازی اکستنشنهای ضروری را به صورت عملی آموزش دادیم. با اعمال این تنظیمات، میتوانید از بروز خطاهای رایج جلوگیری کرده و عملکرد سایت خود را بهبود بخشید. اگر از هاست اشتراکی استفاده میکنید و به تنظیمات پیشرفته دسترسی ندارید، میتوانید از سرویسهای میزبانی وب سرورنت که از آخرین نسخههای PHP پشتیبانی میکنند، بهره ببرید. به یاد داشته باشید که همیشه قبل از اعمال تغییرات، از فایلهای سایت و پایگاه داده خود بکآپ بگیرید.