رفع مشکل سفید شدن صفحه ورود به phpmyadmin
سفید شدن کامل صفحه ورود phpMyAdmin تقریباً همیشه یک معنی دارد: یک خطای مرگبار PHP رخ داده و چون نمایش خطاها روی سرور خاموش است، مرورگر فقط یک صفحه خالی تحویل میگیرد. بنابراین اولین اقدام درست، نصب مجدد نیست؛ اولین اقدام خواندن لاگ خطای PHP است تا بفهمید دقیقاً چه چیزی اجرا را متوقف کرده است.
چرا به جای پیام خطا صفحه سفید میبینیم؟
در پیکربندی امن سرورهای عملیاتی مقدار display_errors روی Off تنظیم میشود تا مسیر فایلها و ساختار داخلی برنامه به بازدیدکننده نشان داده نشود. وقتی PHP در میانه اجرا به خطای غیرقابل بازیابی میرسد، خروجی تولیدشده تا آن لحظه دور ریخته میشود و پاسخی خالی، معمولاً با کد وضعیت 500، به مرورگر برمیگردد. پس صفحه سفید یک اشکال مستقل نیست، بلکه پوششی روی یک خطای کاملاً مشخص است که در لاگ ثبت شده.
اگر اصلاً هیچ پاسخی نمیگیرید و خود پنل هم باز نمیشود، ماجرا از phpMyAdmin فراتر رفته و باید خطای Connection to server failed در cPanel را دنبال کنید. پیش از هر کاری با ابزار Developer Tools مرورگر (بخش Network) کد وضعیت پاسخ را ببینید. اگر 500 است، خطا سمت سرور است. اگر 200 برمیگردد ولی بدنه پاسخ خالی است، باز هم خطای PHP در کار است و صرفاً کد وضعیت زودتر ارسال شده.
قدم اول: لاگ خطا را بخوانید
خواندن لاگهای سطح سرور به دسترسی شل نیاز دارد؛ روی سرور مجازی ابری که با دسترسی روت کامل ارائه میشود این فایلها مستقیم در اختیار خودتان است و میتوانید همان لحظه لاگ را دنبال کنید. محل لاگ به این بستگی دارد که phpMyAdmin از کجا اجرا میشود:
- phpMyAdmin داخلی cPanel که روی پورت
2083بالا میآید، زیر سرویس cpsrvd اجرا میشود و خطاهایش در/usr/local/cpanel/logs/error_logثبت میگردد. - برای دیدن خودِ درخواست و کد وضعیت آن از
tail -f /usr/local/cpanel/logs/access_logاستفاده کنید و همان لحظه صفحه را دوباره باز کنید. - اگر phpMyAdmin را جداگانه زیر یک وبسرور نصب کردهاید، سراغ لاگ خطای همان وبسرور بروید؛ روی cPanel معمولاً
/etc/apache2/logs/error_logو روی نصبهای دیگر/var/log/httpd/error_logیا/var/log/nginx/error.log. فایلerror_logداخل پوشه سایت را هم بررسی کنید.
دستور tail -n 100 /usr/local/cpanel/logs/error_log را اجرا کنید و دنبال سطرهایی با عبارت PHP Fatal error بگردید. تقریباً همیشه نام افزونه یا تابع گمشده در همان سطر نوشته شده و بقیه مسیر عیبیابی را کوتاه میکند.
علتهای رایج و راهحل هرکدام
افزونه ضروری PHP نصب یا فعال نیست
phpMyAdmin بدون mbstring، session، mysqli، json و ctype اجرا نمیشود و نبودشان دقیقاً به شکل صفحه سفید بروز میکند. فهرست افزونههای فعال را با php -m بگیرید. روی cPanel باید همان نسخهای را صدا بزنید که سایت با آن کار میکند، مثلاً /opt/cpanel/ea-php81/root/usr/bin/php -m. اگر mbstring در خروجی نبود، امنترین راه فعال کردن آن از مسیر WHM و بخش EasyApache 4 است تا وابستگیها همزمان حل شوند. روی DirectAdmin افزونهها از طریق CustomBuild در مسیر /usr/local/directadmin/custombuild مدیریت میشوند. روی همان پنل، اگر بهجای صفحهٔ سفید پیام Access denied for user دیدید، ماجرا افزونهٔ PHP نیست و ریشهاش رمز دیتابیس da_admin است؛ مسیر رفعش در رفع خطای Access denied for user در دایرکت ادمین آمده است.
اگر روی هاست اشتراکی هستید و به شل دسترسی ندارید، این تغییرات در اختیار شما نیست و باید نسخه PHP یا فعالسازی افزونه را از پشتیبانی سرویس بخواهید.
دایرکتوری session قابل نوشتن نیست
صفحه ورود phpMyAdmin پیش از هر چیز یک session میسازد؛ اگر مسیر ذخیره session وجود نداشته باشد یا قابل نوشتن نباشد، اجرا همانجا متوقف میشود. مسیر فعلی را با php -i | grep session.save_path ببینید و وضعیت آن را با ls -ld بررسی کنید. روی cPanel این مسیر معمولاً زیر /var/cpanel/php/sessions/ و برای هر نسخه PHP جداست. اگر phpMyAdmin را جدا از کنترلپنل و دستی روی سرور نصب کردهاید، راهنمای نصب و ایمنسازی phpMyAdmin مسیر نصب و نکتههای امنیتی آن را جدا پوشش داده است.
یک علت پرتکرار و فریبنده هم پر شدن دیسک یا تمام شدن inodeهاست؛ در این حالت هیچ فایل session تازهای ساخته نمیشود. با df -h و df -i هر دو را کنترل کنید.
حافظه مجاز PHP کم است
اگر صفحه ورود بالا میآید ولی بعد از احراز هویت یا هنگام باز کردن یک جدول بزرگ سفید میشود، معمولاً حافظه تمام شده است. در لاگ عبارت Allowed memory size ... exhausted را میبینید. مقدار فعلی memory_limit را با php -i | grep memory_limit بگیرید و در صورت نیاز آن را در php.ini یا از طریق MultiPHP INI Editor در cPanel افزایش دهید. پس از تغییر، سرویس PHP-FPM یا وبسرور را ریاستارت کنید تا مقدار جدید خوانده شود.
بهروزرسانی نیمهکاره phpMyAdmin
اگر بهروزرسانی قبلی وسط کار قطع شده باشد، بخشی از فایلها نسخه قدیمی و بخشی نسخه جدید میمانند و نتیجهاش خطای مرگبار است. روی cPanel، phpMyAdmin به شکل یک بسته با نام cpanel-phpmyadmin نصب میشود و فایل پیکربندی آن در /usr/local/cpanel/base/3rdparty/phpMyAdmin/config.inc.php قرار دارد. اگر همین فایل خراب شده باشد، با دستور زیر دوباره از روی قالب پیشفرض ساخته میشود:
/usr/local/cpanel/bin/update_phpmyadmin_config
اگر خودِ فایلهای بسته ناقص یا دستکاری شده باشند، سلامت بسته را بررسی و در صورت نیاز آن را دوباره نصب کنید؛ در سامانه بستههای cPanel نام هدف مربوط به phpMyAdmin برابر phpmy است:
/scripts/check_cpanel_pkgs --fix --targets=phpmy
و اگر مشکل باز هم پابرجا بود، بهروزرسانی کامل پنل اغلب کار را تمام میکند:
/scripts/upcp --force
این دستور سنگین است و ممکن است طول بکشد؛ آن را در ساعت کمترافیک و ترجیحاً داخل screen یا tmux اجرا کنید تا قطع شدن ارتباط SSH فرایند را نصفه رها نکند. برای سرورهایی که به دلیل محدودیتهای تحریمی امکان بهروزرسانی مرتب cPanel را ندارند، لایسنس دایرکت ادمین گزینهای است که آنلاین سرور آن را بهعنوان کنترلپنل لینوکسی و جایگزین سیپنل، خارج از دایره تحریمها معرفی میکند.
خرابی فایل پیکربندی در نصب مستقل
در نصبهای جداگانه، یک خطای نگارشی ساده در config.inc.php کافی است تا صفحه سفید شود. سلامت فایل را با php -l config.inc.php بسنجید. همچنین اگر در .htaccess دستورهایی مثل php_value نوشتهاید و سرور با PHP-FPM کار میکند، همانها خطای 500 تولید میکنند و باید به .user.ini منتقل شوند؛ جزئیات این جابهجایی و محدودیتهای disable_functions را در رفع خطای ini_set() has been disabled آوردهایم.
اگر لازم شد خطا را موقتاً نمایش دهید
وقتی لاگ چیزی نشان نمیدهد، میتوانید برای مدت کوتاهی display_errors = On و error_reporting = E_ALL را در php.ini فعال کنید و پس از دیدن پیام، بلافاصله به حالت قبل برگردانید. رها کردن این تنظیم روی سرور عملیاتی یک ریسک امنیتی واقعی است، چون مسیرهای داخلی و نام کاربر پایگاهداده را افشا میکند. اگر ترجیح میدهید این عیبیابی را به کسی بسپارید، خدمات پشتیبانی و مدیریت سرور آنلاین سرور رفع مشکل کنترلپنلهای میزبانی مثل cPanel و DirectAdmin و همچنین دیتابیسسرورهایی مثل MySQL و MariaDB را پوشش میدهد.
چطور جلوی تکرارش را بگیریم
- پیش از هر بهروزرسانی پنل یا تغییر نسخه PHP، از پیکربندی و پایگاهداده نسخه پشتیبان بگیرید.
- فضای دیسک و inode را پایش کنید؛ بسیاری از صفحهسفیدها ریشهشان پر شدن پارتیشن است.
- نسخه PHP را بدون بررسی سازگاری بالا نبرید و پس از هر ارتقا، phpMyAdmin و اسکریپتهای حساس را یک بار دستی تست کنید.
- دسترسی به phpMyAdmin را به IPهای مشخص محدود کنید تا هم امنیت بالاتر برود و هم دامنه عیبیابی کوچکتر شود.
در عمل، اگر لاگ را از همان ابتدا بخوانید، مسیر رسیدن به علت خیلی کوتاهتر میشود؛ چیزی که وقتگیر است، حدس زدن بدون داده است.