صفحه سفید در وردپرس و PHP چیست و چرا رخ میدهد؟
صفحه سفید (White Screen of Death) یکی از رایجترین مشکلاتی است که مدیران سایتهای وردپرسی و برنامههای PHP با آن مواجه میشوند. وقتی با این مشکل روبهرو میشوید، بهجای محتوای سایت، فقط یک صفحه کاملاً خالی و سفید میبینید. این اتفاق معمولاً بهدلیل یک خطای PHP رخ میدهد که بهصورت خاموش (silent) اجرا شده و هیچ پیام خطایی به کاربر نمایش داده نمیشود.
دلایل اصلی بروز صفحه سفید عبارتند از: خطای fatal در یک افزونه یا قالب، کمبود حافظه اختصاصیافته به PHP (memory limit)، وجود کاراکتر BOM یا فاصله اضافی در فایلهای functions.php یا wp-config.php، و گاهی نیز مشکلات مربوط به هاست یا تنظیمات سرور. در این مقاله، بهصورت عملی و مرحلهبهمرحله یاد میگیرید که چگونه این خطا را شناسایی و رفع کنید.
مرحله اول: فعالکردن نمایش خطاهای PHP
اولین قدم برای رفع صفحه سفید، دیدن خطای واقعی است. وردپرس بهطور پیشفرض نمایش خطاها را غیرفعال میکند تا اطلاعات حساس سرور لو نرود. برای فعالکردن موقت نمایش خطاها، باید فایل wp-config.php را ویرایش کنید.
ویرایش wp-config.php برای نمایش خطا
با استفاده از SSH یا فایلمنیجر هاست، فایل wp-config.php را باز کنید و خط زیر را دقیقاً قبل از خط /* That's all, stop editing! Happy blogging. */ اضافه کنید:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
با این تنظیمات، خطاها در فایل wp-content/debug.log ثبت میشوند اما در صفحه نمایش داده نمیشوند. حالا آدرس سایت را باز کنید و سپس فایل لاگ را بررسی کنید:
tail -f wp-content/debug.log
اگر خطایی مانند Fatal error: Allowed memory size of 67108864 bytes exhausted دیدید، یعنی مشکل از کمبود حافظه است که در بخش سوم به آن میپردازیم. اگر خطای دیگری مثل Parse error یا syntax error مشاهده کردید، مشکل از یک فایل PHP خاص است.
نکته مهم: بعد از رفع مشکل، حتماً مقادیر WP_DEBUG را به false برگردانید تا سایت شما در معرض نمایش خطاهای عمومی قرار نگیرد.
مرحله دوم: غیرفعالسازی افزونهها و قالب
بیشتر موارد صفحه سفید بهدلیل تداخل یک افزونه یا قالب با هسته وردپرس یا سایر افزونهها رخ میدهد. برای تشخیص اینکه کدام یک مقصر است، باید آنها را یکبهیک غیرفعال کنید.
غیرفعالسازی افزونهها از طریق FTP یا SSH
سادهترین روش، تغییر نام پوشه wp-content/plugins است. با این کار، وردپرس هیچ افزونهای را بارگذاری نمیکند:
mv wp-content/plugins wp-content/plugins-disabled
حالا سایت را باز کنید. اگر صفحه سفید برطرف شد، یعنی مشکل از یکی از افزونههاست. برای پیدا کردن افزونه مقصر، پوشه را به نام اصلی برگردانید و سپس افزونهها را یکبهیک از داخل پیشخوان وردپرس غیرفعال کنید. اگر به پیشخوان دسترسی ندارید، میتوانید از طریق دیتابیس، افزونهها را غیرفعال کنید:
UPDATE wp_options SET option_value = 'a:0:{}' WHERE option_name = 'active_plugins';
این کوئری را در phpMyAdmin یا از طریق خط فرمان MySQL اجرا کنید. بعد از آن، همه افزونهها غیرفعال میشوند و میتوانید آنها را یکییکی فعال کنید.
تست قالب پیشفرض
اگر مشکل از افزونه نبود، قالب را تغییر دهید. از طریق FTP، پوشه قالب فعال را در wp-content/themes تغییر نام دهید. وردپرس بهطور خودکار به قالب پیشفرض (Twenty Twenty-Four یا مشابه) برمیگردد:
mv wp-content/themes/my-theme wp-content/themes/my-theme-disabled
اگر سایت درست شد، مشکل از قالب شماست. معمولاً خطا در فایل functions.php قالب رخ میدهد. این فایل را باز کنید و بهدنبال فاصله یا خط جدید بعد از تگ بستهشدن ?> بگردید. حتی یک کاراکتر فاصله بعد از این تگ میتواند باعث خطای headers already sent و در نتیجه صفحه سفید شود.
اشتباه رایج: بسیاری از کاربران فایل functions.php را با ویرایشگرهای سیستمعامل مانند Notepad ویندوز ویرایش میکنند که کاراکترهای پنهان (BOM) به فایل اضافه میکند. همیشه از ویرایشگرهای برنامهنویسی مثل VS Code یا PHPStorm استفاده کنید.
مرحله سوم: افزایش حافظه اختصاصی PHP
کمبود حافظه، یکی از دلایل اصلی صفحه سفید در سایتهای وردپرسی با افزونههای سنگین است. مقدار پیشفرض حافظه PHP معمولاً ۶۴ یا ۱۲۸ مگابایت است که برای سایتهای مدرن کافی نیست.
افزایش memory_limit در wp-config.php
سادهترین راه، افزودن خط زیر به فایل wp-config.php است:
define('WP_MEMORY_LIMIT', '256M');
این مقدار، حافظه را برای وردپرس به ۲۵۶ مگابایت افزایش میدهد. اگر سایت شما از افزونههای سنگین مثل Page Builder یا ووکامرس با محصولات زیاد استفاده میکند، ممکن است به ۳۸۴ یا حتی ۵۱۲ مگابایت نیاز داشته باشید:
define('WP_MEMORY_LIMIT', '512M');
افزایش حافظه در php.ini
اگر به فایل php.ini دسترسی دارید (در هاستهای مدیریتشده معمولاً از طریق بخش PHP Settings در کنترلپنل)، مقدار زیر را تغییر دهید:
memory_limit = 256M
بعد از تغییر، سرویس PHP یا وبسرور را ریاستارت کنید:
sudo systemctl restart php8.2-fpm
برای اطمینان از اعمال تغییرات، میتوانید یک فایل تست به نام info.php در ریشه سایت ایجاد کنید:
<?php phpinfo(); ?>
سپس آدرس yourdomain.com/info.php را باز کنید و مقدار memory_limit را بررسی کنید. بعد از تست، حتماً این فایل را حذف کنید چون اطلاعات حساس سرور را نمایش میدهد.
نکته: اگر در هاست اشتراکی هستید و دسترسی به php.ini ندارید، میتوانید فایل .htaccess را ویرایش کنید:
php_value memory_limit 256M
این روش فقط روی هاستهای آپاچی کار میکند و در لایتاسپید یا NGINX باید از روشهای دیگر استفاده کنید.
مرحله چهارم: بررسی فایلهای اصلی وردپرس
اگر مراحل بالا جواب نداد، احتمال دارد فایلهای اصلی وردپرس آسیب دیده باشند. این اتفاق معمولاً بعد از یک بهروزرسانی ناقص یا حمله هکری رخ میدهد.
بازنصب فایلهای هسته وردپرس
از پیشخوان وردپرس، به مسیر پیشخوان ← بهروزرسانیها بروید و دکمه «بهروزرسانی مجدد» را بزنید. اگر به پیشخوان دسترسی ندارید، فایلهای هسته را بهصورت دستی جایگزین کنید:
- آخرین نسخه وردپرس را از
wordpress.orgدانلود کنید. - فایلهای پوشه
wp-adminوwp-includesرا با نسخه جدید جایگزین کنید. - فایلهای
index.php،wp-blog-header.phpوwp-settings.phpرا در ریشه سایت جایگزین کنید.
مهم است که پوشه wp-content را جایگزین نکنید چون شامل افزونهها، قالبها و فایلهای آپلودی شماست.
بررسی مجوزهای فایل (Permissions)
مجوزهای نادرست فایل نیز میتواند باعث صفحه سفید شود. مجوزهای استاندارد وردپرس به این صورت است:
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
این دستورات را از ریشه سایت اجرا کنید. اگر مشکل از مالکیت فایلهاست، میتوانید مالک را تغییر دهید:
chown -R www-data:www-data /var/www/your-site
نام کاربری و گروه ممکن است بسته به هاست شما متفاوت باشد (مثلاً nginx یا apache).
مرحله پنجم: بررسی لاگهای سرور
اگر هیچکدام از روشهای بالا جواب نداد، باید لاگهای سرور را بررسی کنید. لاگ خطاهای PHP معمولاً در مسیر زیر قرار دارد:
/var/log/php_errors.log
یا در هاستهای اشتراکی، در پوشه logs داخل حساب کاربری شما. برای مشاهده آخرین خطاها:
tail -n 50 /var/log/php_errors.log
همچنین لاگ خطاهای وبسرور (Apache یا Nginx) را بررسی کنید:
# برای آپاچی
tail -f /var/log/apache2/error.log
# برای انجیناکس
tail -f /var/log/nginx/error.log
این لاگها معمولاً جزئیات دقیقتری از خطا را نشان میدهند، از جمله نام فایل و شماره خطی که خطا در آن رخ داده است.
اشتباه رایج: بسیاری از افراد بعد از رفع مشکل، فایل debug.log را در پوشه wp-content باقی میگذارند. این فایل میتواند اطلاعات حساس مثل مسیرهای سرور را فاش کند. حتماً بعد از رفع خطا، آن را حذف کنید.
جمعبندی و پیشگیری از بروز مجدد
صفحه سفید در وردپرس و PHP معمولاً با دنبالکردن این چهار مرحله برطرف میشود: فعالکردن نمایش خطا، غیرفعالسازی افزونهها و قالب، افزایش حافظه PHP، و بررسی فایلهای اصلی. برای پیشگیری از بروز مجدد این مشکل، توصیه میکنم:
- قبل از بهروزرسانی افزونهها یا قالبها، از سایت خود بکاپ کامل بگیرید.
- از یک افزونه کش معتبر استفاده کنید تا بار سرور کاهش یابد.
- افزونههای غیرضروری را حذف کنید؛ هر افزونه اضافی، حافظه مصرف میکند.
- مقدار
WP_MEMORY_LIMITرا از ابتدا روی ۲۵۶M تنظیم کنید. - فایلهای قالب و افزونه را با ویرایشگر مناسب ویرایش کنید تا از ورود کاراکترهای پنهان جلوگیری شود.
اگر با وجود تمام این مراحل، همچنان صفحه سفید مشاهده میکنید، احتمال دارد مشکل از زیرساخت هاست شما باشد. در این صورت، بررسی کنید که آیا سایر سایتهای روی همان سرور نیز مشکل دارند یا خیر. اگر سایت شما روی هاست اشتراکی است و مشکل از منابع سرور است، ممکن است نیاز به ارتقای پلن یا مهاجرت به یک سرویس با منابع بالاتر داشته باشید. سرورنت بهعنوان ارائهدهنده خدمات هاستینگ، پلنهای متنوعی برای سایتهای وردپرسی دارد که میتوانید متناسب با نیاز خود انتخاب کنید.
در نهایت، به یاد داشته باشید که صفحه سفید یک مشکل قابلحل است و با یک رویکرد سیستماتیک، میتوانید در کمتر از ۳۰ دقیقه آن را شناسایی و رفع کنید. نکته کلیدی این است که هرگز بدون دیدن خطای واقعی، تغییرات تصادفی اعمال نکنید؛ چون ممکن است وضعیت را بدتر کنید.