Schermata bianca della morte (WSOD)
Come diagnosticare e correggere pagine bianche vuote in XOOPS.
Diagramma di flusso diagnostico
Sezione intitolata “Diagramma di flusso diagnostico”flowchart TD A[Schermata bianca] --> B{Errori PHP visibili?} B -->|No| C[Abilita visualizzazione errori] B -->|Yes| D[Leggi messaggio di errore]
C --> E{Gli errori sono ora visibili?} E -->|Yes| D E -->|No| F[Controlla registro degli errori PHP]
D --> G{Tipo di errore?} G -->|Memory| H[Aumenta memory_limit] G -->|Syntax| I[Correggi sintassi PHP] G -->|Missing File| J[Ripristina file] G -->|Permission| K[Correggi autorizzazioni] G -->|Database| L[Controlla connessione DB]
F --> M{Il registro ha errori?} M -->|Yes| D M -->|No| N[Controlla log server web]
N --> O{Problema trovato?} O -->|Yes| D O -->|No| P[Abilita debug XOOPS]Diagnosi rapida
Sezione intitolata “Diagnosi rapida”Passaggio 1: abilita visualizzazione errori PHP
Sezione intitolata “Passaggio 1: abilita visualizzazione errori PHP”Aggiungi a mainfile.php temporaneamente:
<?php// Aggiungi in alto, dopo <?phperror_reporting(E_ALL);ini_set('display_errors', '1');ini_set('display_startup_errors', '1');Passaggio 2: controlla registro errori PHP
Sezione intitolata “Passaggio 2: controlla registro errori PHP”# Posizioni comuni dei logtail -100 /var/log/php/error.logtail -100 /var/log/apache2/error.logtail -100 /var/log/nginx/error.log
# O controlla le informazioni PHP per il percorso del logphp -i | grep error_logPassaggio 3: abilita debug XOOPS
Sezione intitolata “Passaggio 3: abilita debug XOOPS”// In mainfile.phpdefine('XOOPS_DEBUG_LEVEL', 2);Cause e soluzioni comuni
Sezione intitolata “Cause e soluzioni comuni”pie title Cause comuni di WSOD "Limite di memoria" : 25 "Errore di sintassi PHP" : 20 "File mancanti" : 15 "Problemi del database" : 15 "Autorizzazioni" : 10 "Errori di template" : 10 "Timeout" : 51. Limite di memoria superato
Sezione intitolata “1. Limite di memoria superato”Sintomi:
- Pagina vuota su operazioni di grandi dimensioni
- Funziona con dati piccoli, fallisce con dati grandi
Errore:
Fatal error: Allowed memory size of 134217728 bytes exhaustedSoluzioni:
// In mainfile.phpini_set('memory_limit', '256M');
// O in .htaccessphp_value memory_limit 256M
// O in php.inimemory_limit = 256M2. Errore di sintassi PHP
Sezione intitolata “2. Errore di sintassi PHP”Sintomi:
- WSOD dopo la modifica di un file PHP
- Una pagina specifica fallisce, le altre funzionano
Errore:
Parse error: syntax error, unexpected '}' in /path/file.php on line 123Soluzioni:
# Controlla il file per errori di sintassiphp -l /path/to/file.php
# Controlla tutti i file PHP nel modulofind modules/mymodule -name "*.php" -exec php -l {} \;3. File richiesto mancante
Sezione intitolata “3. File richiesto mancante”Sintomi:
- WSOD dopo il caricamento/migrazione
- Pagine casuali falliscono
Errore:
Fatal error: require_once(): Failed opening required 'class/Helper.php'Soluzioni:
# Ricarica i file mancanti# Confronta con un'installazione frescadiff -r /path/to/xoops /path/to/fresh-xoops
# Controlla le autorizzazioni dei filels -la class/4. Connessione al database non riuscita
Sezione intitolata “4. Connessione al database non riuscita”Sintomi:
- Tutte le pagine mostrano WSOD
- I file statici (immagini, CSS) funzionano
Errore:
Warning: mysqli_connect(): Access denied for userSoluzioni:
// Verifica le credenziali 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');
// Prova la connessione manualmente<?php$conn = new mysqli('localhost', 'user', 'pass', 'database');if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error);}echo "Connected successfully";5. Problemi di autorizzazione
Sezione intitolata “5. Problemi di autorizzazione”Sintomi:
- WSOD quando si scrivono file
- Errori di cache/compilazione
Soluzioni:
# Correggi le autorizzazioni della directorychmod -R 755 htdocs/chmod -R 777 xoops_data/chmod -R 777 uploads/
# Correggi la proprietàchown -R www-data:www-data /path/to/xoops6. Errore di template Smarty
Sezione intitolata “6. Errore di template Smarty”Sintomi:
- WSOD su pagine specifiche
- Funziona dopo la cancellazione della cache
Soluzioni:
# Cancella cache di Smartyrm -rf xoops_data/caches/smarty_cache/*rm -rf xoops_data/caches/smarty_compile/*
# Controlla la sintassi del template7. Tempo di esecuzione massimo
Sezione intitolata “7. Tempo di esecuzione massimo”Sintomi:
- WSOD dopo ~30 secondi
- Le operazioni lunghe falliscono
Errore:
Fatal error: Maximum execution time of 30 seconds exceededSoluzioni:
// In mainfile.phpset_time_limit(300);
// O in .htaccessphp_value max_execution_time 300Script di debug
Sezione intitolata “Script di debug”Crea debug.php nella radice XOOPS:
<?php/** * Script di debug XOOPS * Elimina dopo la risoluzione dei problemi! */
error_reporting(E_ALL);ini_set('display_errors', '1');
echo "<h1>Debug XOOPS</h1>";
// Controlla versione PHPecho "<h2>Versione PHP</h2>";echo "PHP " . PHP_VERSION . "<br>";
// Controlla estensioni richiesteecho "<h2>Estensioni richieste</h2>";$required = ['mysqli', 'gd', 'curl', 'json', 'mbstring'];foreach ($required as $ext) { $status = extension_loaded($ext) ? '✓' : '✗'; echo "$status $ext<br>";}
// Controlla le autorizzazioni della directoryecho "<h2>Autorizzazioni della directory</h2>";$dirs = [ 'xoops_data' => 'xoops_data', 'uploads' => 'uploads', 'cache' => 'xoops_data/caches'];foreach ($dirs as $name => $path) { $writable = is_writable($path) ? '✓ Scrivibile' : '✗ Non scrivibile'; echo "$name: $writable<br>";}
// Prova la connessione al databaseecho "<h2>Connessione al database</h2>";if (file_exists('mainfile.php')) { // Estrai le credenziali (regex semplice, non sicura per la produzione) $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 "✗ Connessione non riuscita: " . $conn->connect_error; } else { echo "✓ Connesso al database"; $conn->close(); } }} else { echo "mainfile.php non trovato";}
// Informazioni sulla memoriaecho "<h2>Memoria</h2>";echo "Limite di memoria: " . ini_get('memory_limit') . "<br>";echo "Utilizzo corrente: " . round(memory_get_usage() / 1024 / 1024, 2) . " MB<br>";
// Controlla il percorso del registro degli erroriecho "<h2>Registro degli errori</h2>";echo "Posizione: " . ini_get('error_log');Prevenzione
Sezione intitolata “Prevenzione”graph LR A[Backup prima dei cambiamenti] --> E[Sito stabile] B[Prova nello sviluppo] --> E C[Monitora i registri degli errori] --> E D[Usa il controllo della versione] --> E- Sempre backup prima di apportare modifiche
- Prova in locale prima di distribuire
- Monitora i registri degli errori regolarmente
- Usa git per tracciare le modifiche
- Mantieni PHP aggiornato entro le versioni supportate
Documentazione correlata
Sezione intitolata “Documentazione correlata”- Errori di connessione al database
- Errori di autorizzazione negata
- Abilita modalità debug
#xoops #troubleshooting #wsod #debugging #errors