หน้าจอสีขาวแห่งความตาย (WSOD)
วิธีวินิจฉัยและแก้ไขหน้าว่างสีขาวใน XOOPS
ผังงานการวินิจฉัย
หัวข้อที่มีชื่อว่า “ผังงานการวินิจฉัย”mermaidflowchart TD A[White Screen] --> B{PHP Errors Visible?} B -->|No| C[Enable Error Display] B -->|Yes| D[Read Error Message]
C --> E{Errors Now Visible?} E -->|Yes| D E -->|No| F[Check PHP Error Log]
D --> G{Error Type?} G -->|Memory| H[Increase memory_limit] G -->|Syntax| I[Fix PHP Syntax] G -->|Missing File| J[Restore File] G -->|Permission| K[Fix Permissions] G -->|Database| L[Check DB Connection]
F --> M{Log Has Errors?} M -->|Yes| D M -->|No| N[Check Web Server Logs]
N --> O{Found Issue?} O -->|Yes| D O -->|No| P[Enable XOOPS Debug]การวินิจฉัยอย่างรวดเร็ว
หัวข้อที่มีชื่อว่า “การวินิจฉัยอย่างรวดเร็ว”ขั้นตอนที่ 1: เปิดใช้งานการแสดงข้อผิดพลาด PHP
หัวข้อที่มีชื่อว่า “ขั้นตอนที่ 1: เปิดใช้งานการแสดงข้อผิดพลาด PHP”เพิ่มใน mainfile.php ชั่วคราว:
<?php// Add at the very top, after <?phperror_reporting(E_ALL);ini_set('display_errors', '1');ini_set('display_startup_errors', '1');ขั้นตอนที่ 2: ตรวจสอบบันทึกข้อผิดพลาด PHP
หัวข้อที่มีชื่อว่า “ขั้นตอนที่ 2: ตรวจสอบบันทึกข้อผิดพลาด PHP”# Common log locationstail -100 /var/log/php/error.logtail -100 /var/log/apache2/error.logtail -100 /var/log/nginx/error.log
# Or check PHP info for log locationphp -i | grep error_logขั้นตอนที่ 3: เปิดใช้งาน XOOPS ดีบัก
หัวข้อที่มีชื่อว่า “ขั้นตอนที่ 3: เปิดใช้งาน XOOPS ดีบัก”// In mainfile.phpdefine('XOOPS_DEBUG_LEVEL', 2);สาเหตุและวิธีแก้ไขทั่วไป
หัวข้อที่มีชื่อว่า “สาเหตุและวิธีแก้ไขทั่วไป”mermaidpie title WSOD Common Causes "Memory Limit" : 25 "PHP Syntax Error" : 20 "Missing Files" : 15 "Database Issues" : 15 "Permissions" : 10 "Template Errors" : 10 "Timeout" : 51. เกินขีดจำกัดหน่วยความจำ
หัวข้อที่มีชื่อว่า “1. เกินขีดจำกัดหน่วยความจำ”อาการ:
- หน้าว่างในการดำเนินการขนาดใหญ่
- ใช้ได้กับข้อมูลขนาดเล็ก แต่ล้มเหลวกับข้อมูลขนาดใหญ่
ข้อผิดพลาด:
Fatal error: Allowed memory size of 134217728 bytes exhaustedแนวทางแก้ไข:
// In mainfile.phpini_set('memory_limit', '256M');
// Or in .htaccessphp_value memory_limit 256M
// Or in php.inimemory_limit = 256M2. PHP ข้อผิดพลาดทางไวยากรณ์
หัวข้อที่มีชื่อว่า “2. PHP ข้อผิดพลาดทางไวยากรณ์”อาการ:
- WSOD หลังจากแก้ไขไฟล์ PHP
- เพจเฉพาะล้มเหลว เพจอื่นๆ ทำงาน
ข้อผิดพลาด:
Parse error: syntax error, unexpected '}' in /path/file.php on line 123แนวทางแก้ไข:
# Check file for syntax errorsphp -l /path/to/file.php
# Check all PHP files in modulefind modules/mymodule -name "*.php" -exec php -l {} \;3. ขาดไฟล์ที่จำเป็น
หัวข้อที่มีชื่อว่า “3. ขาดไฟล์ที่จำเป็น”อาการ:
- WSOD หลังจากอัปโหลด/ย้ายข้อมูล
- หน้าสุ่มล้มเหลว
ข้อผิดพลาด:
Fatal error: require_once(): Failed opening required 'class/Helper.php'แนวทางแก้ไข:
# Re-upload missing files# Compare against fresh installationdiff -r /path/to/xoops /path/to/fresh-xoops
# Check file permissionsls -la class/4. การเชื่อมต่อฐานข้อมูลล้มเหลว
หัวข้อที่มีชื่อว่า “4. การเชื่อมต่อฐานข้อมูลล้มเหลว”อาการ:
- ทุกหน้าแสดง WSOD
- ไฟล์คงที่ (รูปภาพ CSS) ใช้งานได้
ข้อผิดพลาด:
Warning: mysqli_connect(): Access denied for userแนวทางแก้ไข:
// Verify credentials in mainfile.phpdefine('XOOPS_DB_HOST', 'localhost');define('XOOPS_DB_USER', 'your_user');define('XOOPS_DB_PASS', 'your_password');define('XOOPS_DB_NAME', 'your_database');
// Test connection manually<?php$conn = new mysqli('localhost', 'user', 'pass', 'database');if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error);}echo "Connected successfully";5. ปัญหาการอนุญาต
หัวข้อที่มีชื่อว่า “5. ปัญหาการอนุญาต”อาการ:
- WSOD เมื่อเขียนไฟล์
- ข้อผิดพลาดแคช/คอมไพล์
แนวทางแก้ไข:
# Fix directory permissionschmod -R 755 htdocs/chmod -R 777 xoops_data/chmod -R 777 uploads/
# Fix ownershipchown -R www-data:www-data /path/to/xoops6. ข้อผิดพลาดเทมเพลต Smarty
หัวข้อที่มีชื่อว่า “6. ข้อผิดพลาดเทมเพลต Smarty”อาการ:
- WSOD บนหน้าเว็บเฉพาะ
- ใช้งานได้หลังจากล้างแคช
แนวทางแก้ไข:
# Clear Smarty cacherm -rf xoops_data/caches/smarty_cache/*rm -rf xoops_data/caches/smarty_compile/*
# Check template syntax7. เวลาดำเนินการสูงสุด
หัวข้อที่มีชื่อว่า “7. เวลาดำเนินการสูงสุด”อาการ:
- WSOD หลังจาก ~30 วินาที
- การดำเนินการระยะยาวล้มเหลว
ข้อผิดพลาด:
Fatal error: Maximum execution time of 30 seconds exceededแนวทางแก้ไข:
// In mainfile.phpset_time_limit(300);
// Or in .htaccessphp_value max_execution_time 300สคริปต์แก้ไขข้อบกพร่อง
หัวข้อที่มีชื่อว่า “สคริปต์แก้ไขข้อบกพร่อง”สร้าง debug.php ใน XOOPS root:
<?php/** * XOOPS Debug Script * Delete after troubleshooting! */
error_reporting(E_ALL);ini_set('display_errors', '1');
echo "<h1>XOOPS Debug</h1>";
// Check PHP versionecho "<h2>PHP Version</h2>";echo "PHP " . PHP_VERSION . "<br>";
// Check required extensionsecho "<h2>Required Extensions</h2>";$required = ['mysqli', 'gd', 'curl', 'json', 'mbstring'];foreach ($required as $ext) { $status = extension_loaded($ext) ? '✓' : '✗'; echo "$status $ext<br>";}
// Check file permissionsecho "<h2>Directory Permissions</h2>";$dirs = [ 'xoops_data' => 'xoops_data', 'uploads' => 'uploads', 'cache' => 'xoops_data/caches'];foreach ($dirs as $name => $path) { $writable = is_writable($path) ? '✓ Writable' : '✗ Not writable'; echo "$name: $writable<br>";}
// Test database connectionecho "<h2>Database Connection</h2>";if (file_exists('mainfile.php')) { // Extract credentials (simple regex, not production safe) $mainfile = file_get_contents('mainfile.php'); preg_match("/XOOPS_DB_HOST.*'(.+?)'/", $mainfile, $host); preg_match("/XOOPS_DB_USER.*'(.+?)'/", $mainfile, $user); preg_match("/XOOPS_DB_PASS.*'(.+?)'/", $mainfile, $pass); preg_match("/XOOPS_DB_NAME.*'(.+?)'/", $mainfile, $name);
if (!empty($host[1])) { $conn = @new mysqli($host[1], $user[1], $pass[1], $name[1]); if ($conn->connect_error) { echo "✗ Connection failed: " . $conn->connect_error; } else { echo "✓ Connected to database"; $conn->close(); } }} else { echo "mainfile.php not found";}
// Memory infoecho "<h2>Memory</h2>";echo "Memory Limit: " . ini_get('memory_limit') . "<br>";echo "Current Usage: " . round(memory_get_usage() / 1024 / 1024, 2) . " MB<br>";
// Check error log locationecho "<h2>Error Log</h2>";echo "Location: " . ini_get('error_log');การป้องกัน
หัวข้อที่มีชื่อว่า “การป้องกัน”mermaidgraph LR A[Backup Before Changes] --> E[Stable Site] B[Test in Development] --> E C[Monitor Error Logs] --> E D[Use Version Control] --> E- สำรองข้อมูลทุกครั้ง ก่อนทำการเปลี่ยนแปลง
- ทดสอบในเครื่อง ก่อนปรับใช้
- ตรวจสอบบันทึกข้อผิดพลาด เป็นประจำ
- ใช้ git เพื่อติดตามการเปลี่ยนแปลง
- อัปเดต PHP อยู่เสมอ ภายในเวอร์ชันที่รองรับ
เอกสารที่เกี่ยวข้อง
หัวข้อที่มีชื่อว่า “เอกสารที่เกี่ยวข้อง”- ข้อผิดพลาดในการเชื่อมต่อฐานข้อมูล
- ข้อผิดพลาดการอนุญาตถูกปฏิเสธ
- เปิดใช้งานโหมดแก้ไขข้อบกพร่อง
#xoops #การแก้ไขปัญหา #wsod #การดีบัก #ข้อผิดพลาด