Ciao a tutti,
durante il DrupalDay era stata fatta una domanda, non ricordo da chi, riguardo a come evitare di mostrare l'username in caso di database irraggiungibile, per limitare un possibile "problema" di sicurezza. (la domanda non era stata formulata in questo modo, ma il succo era questo).
Ho visto che Drupal utilizza un sistema personalizzato per la gestione degli errori impostato tramite set_error_handler('drupal_error_handler') , drupal_error_handler e' definita in ./includes/common.inc
per sopprimere tutti gli errori a video basta settare in:
Administer->Site configuration->Error reporting
Error reporting: Write errors to the log
di default e' su: Write errors to the log and to the screen.
Per i siti in produzione e' fortemente consigliato non far visualizzare gli errori agli utenti.
Questa impostazione pero' non impedisce di visualizzare a schermo tutti gli errori, infatti rimane fuori proprio il caso di "database non raggiungibile" (quindi gli errori di connessione).
Per sopprimere anche questo errore (consigliato per i siti in produzione), basta aggiungere nel .htaccess, questa direttiva:
php_value display_errors 0
poiche' nel file ./includes/database.inc all'interno della funzione _db_error_page viene effettuato un controllo con ini_get() :
<?php
if ($error && ini_get('display_errors')) {
$message .= '<p><small>The '. theme('placeholder', $db_type) .' error was: '. theme('placeholder', $error) .'.</small></p>';
}
?>
Quindi nel mio caso (PHP 5 e Apache 2) la sezione del .htaccess da modificare sara' questa:
# PHP 5, Apache 1 and 2.
<IfModule mod_php5.c>
php_value magic_quotes_gpc 0
php_value register_globals 0
php_value session.auto_start 0
php_value mbstring.http_input pass
php_value mbstring.http_output pass
php_value mbstring.encoding_translation 0
</IfModule>
e diventera'
# PHP 5, Apache 1 and 2.
<IfModule mod_php5.c>
php_value magic_quotes_gpc 0
php_value register_globals 0
php_value session.auto_start 0
php_value mbstring.http_input pass
php_value mbstring.http_output pass
php_value mbstring.encoding_translation 0
php_value display_errors 0
</IfModule>