Accueil > > > CLASSE DE CONFIGURATION POUR LA GESTION D'ERREUR
CLASSE DE CONFIGURATION POUR LA GESTION D'ERREUR
Information sur la source
Description
/** * Classe de configuration pour la gestion d'erreur * * Permet de définir et lire la configuration à l'exécution * Eventuellement fonctions utiles pour utilisation avec un Error_Handler * * Contextes d'utilisations possibles : * - Le php.ini n'est pas accessible (hébergement mutualisé), * on ne veut pas faire ça dans un .htaccess * - Utiliser un fichier .ini pour y définir plusieurs config adaptées * à des environnements différents (Dev / Prod) * * Notes : * - La valeur par défaut des setters est la valeur par défaut php * */
Source
- <?php
- /**
- * @author Fred
- * @category FredT Library
- * @package Error
- * @subpackage
- * @version 29/12/2007
- *
- */
-
- class FredT_Error_Config {
- /**
- * Niveau d'erreur évolutif
- * La valeur maximale (pour E_ALL) peut changer,
- */
- const E_ALL_EXTRA = 2147483647;
-
- /**
- * Tableau vide utilisé comme modèle la valeur retourné par getConfig()
- *
- * @var array
- */
- protected $_conf=array(
- 'ErrorReporting' => null,
- 'DisplayStartupErrors' => null,
- 'IgnoreRepeatedErrors' => null,
- 'IgnoreRepeatedSource' => null,
- 'ReportMemleaks' => null,
- 'TrackErrors' => null,
- 'WarnPlusOverloading' => null,
- 'DisplayErrors' => null,
- 'HtmlErrors' => null,
- 'DocrefRoot' => null,
- 'DocrefExt' => null,
- 'ErrorPrependString' => null,
- 'ErrorAppendString' => null,
- 'LogErrors' => null,
- 'ErrorLog' => null,
- 'LogErrorsMaxLen' => null,
- );
-
- /**
- * Affecte automatiquement la configuration pour la gestion d'erreur
- *
- * @see setConfig()
- *
- * @param array $conf facultatif
- */
- function __construct(Array $conf=array())
- {
- $this->setConfig($conf);
- }
-
- /**
- * Renvoi le tableau complet des paramètres de configuration actuels
- *
- * @see setConfig()
- *
- * @return array
- */
- public function getConfig()
- {
- $conf=array();
- foreach ($this->_conf as $key => $value) {
- $param= 'get' . $key;
- if (method_exists($this, $param)) {
- $conf[$key] = $this->$param();
- }
- }
- return $conf;
- }
-
- /**
- * Affecte la configuration pour la gestion d'erreur
- *
- * @see http://www.php.net/manual/fr/ref.errorfunc.php
- *
- * @param array $conf
- */
- public function setConfig(Array $conf=array() )
- {
- foreach ($conf as $param => $value) {
- $param= 'set' . $param;
- if (method_exists($this, $param)) {
- $this->$param($value);
- }
- }
- return $this;
- }
-
- /**
- * Détermine si les erreurs doivent être affichées à l'écran ou non.
- *
- * @param boolean $value
- * @return FredT_Error_Config
- */
- public function setDisplayErrors($value=true)
- {
- $this->_setIni('display_errors', (bool) $value);
- return $this;
- }
-
- /**
- * Retourne si les erreurs sont affichées à l'écran ou non.
- *
- * @return boolean
- */
- public function getDisplayErrors()
- {
- return (bool) ini_get('display_errors');
- }
-
- /**
- * Afficher les erreurs qui peuvent survenir lors de la séquence de démarrage de PHP
- * Recommandé pour le débogage, fortement déconseillé en Prod
- *
- * @param boolean $value
- * @return FredT_Error_Config
- */
- public function setDisplayStartupErrors($value=false)
- {
- $this->_setIni('display_startup_errors', (bool) $value);
- return $this;
- }
-
- /**
- * Retourne si les erreurs qui peuvent survenir lors de la séquence de démarrage
- * de PHP sont affichées à l'écran ou non.
- *
- * @return boolean
- */
- public function getDisplayStartupErrors()
- {
- return (bool) ini_get('display_startup_errors');
- }
-
- /**
- * Ecrit les messages d'erreur soit dans l'historique du serveur ou dans error_log.
- *
- * @param boolean $value
- * @return FredT_Error_Config
- */
- public function setLogErrors($value=false)
- {
- $this->_setIni('log_errors', (bool) $value);
- return $this;
- }
-
- /**
- * Retourne si les messages d'erreur sont écrits soit dans l'historique du serveur
- * ou dans error_log.
- *
- * @return boolean
- */
- public function getLogErrors()
- {
- return (bool) ini_get('log_errors');
- }
-
- /**
- * Ne pas enregistrer des messages répétitifs
- * (Provenance du même fichier et même ligne)
- *
- * @param boolean $value
- * @return FredT_Error_Config
- */
- public function setIgnoreRepeatedErrors($value=false)
- {
- $this->_setIni('ignore_repeated_errors', (bool) $value);
- return $this;
- }
-
- /**
- * Retourne si les messages répétitifs sont enregistrés
- * (Provenance du même fichier et même ligne)
- * ou dans error_log.
- *
- * @return boolean
- */
- public function getIgnoreRepeatedErrors()
- {
- return (bool) ini_get('ignore_repeated_errors');
- }
-
- /**
- * Permet d'éviter d'enregistrer les erreurs provenant du même fichier source.
- * N'est effectif seulement si ignore_repeated_errors est activée.
- * (Provenance du même fichier)
- *
- * @param boolean $value
- * @return FredT_Error_Config
- */
- public function setIgnoreRepeatedSource($value=false)
- {
- $this->_setIni('ignore_repeated_source', (bool) $value);
- return $this;
- }
-
- /**
- * Retourne si les erreurs provenant d'un même fichier source sont enregistrés
- * N'est effectif seulement si ignore_repeated_errors est activée.
- * (Provenance du même fichier)
- *
- * @return boolean
- */
- public function getIgnoreRepeatedSource()
- {
- return (bool) ini_get('ignore_repeated_source');
- }
-
-
- /**
- * A false, les fuites de mémoires seront ignorées.
- * Option valable si PHP compilé avec l'option de débogage,
- * et si error_reporting inclut E_WARNING
- *
- * @param boolean $value
- * @return FredT_Error_Config
- */
- public function setReportMemleaks($value=true)
- {
- $this->_setIni('report_memleaks', (bool) $value);
- return $this;
- }
-
- /**
- * Retourne false si les fuites de mémoires sont ignorées
- * Option valable si PHP compilé avec l'option de débogage,
- * et si error_reporting inclut E_WARNING
- *
- * @return boolean
- */
- public function getReportMemleaks()
- {
- return (bool) ini_get('report_memleaks');
- }
-
- /**
- * A True, le dernier message d'erreur sera placé dans
- * la variable globale $php_errormsg.
- *
- * @param boolean $value
- * @return FredT_Error_Config
- */
- public function setTrackErrors($value=false)
- {
- $this->_setIni('track_errors', (bool) $value);
- return $this;
- }
-
- /**
- * Retourne True si le dernier message d'erreur est placé dans
- * la variable globale $php_errormsg.
- *
- * @return boolean
- */
- public function getTrackErrors()
- {
- return (bool) ini_get('track_errors');
- }
-
- /**
- * A True, Active les balises HTML dans les messages d'erreurs.
- * la variable globale $php_errormsg.
- *
- * @param boolean $value
- * @return FredT_Error_Config
- */
- public function setHtmlErrors($value=true)
- {
- $this->_setIni('html_errors', (bool) $value);
- return $this;
- }
-
- /**
- * Retourne True si les balises HTML dans les messages d'erreurs sont activées
- *
- * @return boolean
- */
- public function getHtmlErrors()
- {
- return (bool) ini_get('html_errors');
- }
-
- /**
- * A True PHP affiche une alerte lorsque l'opérateur (+) est utilisé
- * avec des chaînes de caractères.
- * ATTENTION: modifiable? La doc PHP indique "PHP_INI??"
- *
- * @param boolean $value
- * @return FredT_Error_Config
- */
- public function setWarnPlusOverloading($value=null)
- {
- $this->_setIni('warn_plus_overloading', (bool) $value);
- return $this;
- }
-
- /**
- * Retourne True PHP affiche une alerte lorsque l'opérateur (+) est utilisé
- * avec des chaînes de caractères.
- *
- * @return boolean
- */
- public function getWarnPlusOverloading()
- {
- return (bool) ini_get('warn_plus_overloading');
- }
-
- /**
- * Des messages avec liens hypertexte, redirige vers la documentation
- * de l'erreur ou de la fonction. Défini le lien vers le manuel PHP
- * à utiliser si html_errors est activée.
- * Ne pas utiliser sur un système de production
- * @todo La valeur de l'URL n'est pas vérifier
- *
- * @example
- * Avec une copie locale: "/manual/php/"
- * Avec une référence externe: "http://www.php.net/manual/fr/"
- *
- * @param string $value
- * @return FredT_Error_Config
- */
- public function setDocrefRoot($value='')
- {
- $this->_setIni('docref_root', (string) $value);
- return $this;
- }
-
- /**
- * Retourne le lien utilisé vers le manuel PHP
- * Valable Seulement si html_errors est activée.
- *
- * @return string
- */
- public function getDocrefRoot()
- {
- return (string) ini_get('docref_root');
- }
-
- /**
- * A configurer en complément de docref_root.
- * La valeur doit commencer par un point '.'
- * et correspondre aux extensions du manuel.
- *
- * @example
- * ".php"
- *
- * @param string $value
- * @return FredT_Error_Config
- */
- public function setDocrefExt($value='')
- {
- $this->_setIni('docref_ext', (string) $value);
- return $this;
- }
-
- /**
- * Retourne l'extension des pages utilisé pour le manuel PHP
- *
- * @return string
- */
- public function getDocrefExt()
- {
- return (string) ini_get('docref_ext');
- }
-
- /**
- * Chaîne qui sera utilisé pour préfixer les messages d'erreur.
- * peut très bien être du code HTML.
- *
- * @param string $value
- * @return FredT_Error_Config
- */
- public function setErrorPrependString($value='')
- {
- $this->_setIni('error_prepend_string', (string) $value);
- return $this;
- }
-
- /**
- * Retourne la chaîne utilisé pour préfixer les messages d'erreur.
- *
- * @return string
- */
- public function getErrorPrependString()
- {
- return (string) ini_get('error_prepend_string');
- }
-
- /**
- * Chaîne qui sera utilisé pour suffixer les messages d'erreur.
- * peut très bien être du code HTML.
- *
- * @param string $value
- * @return FredT_Error_Config
- */
- public function setErrorAppendString($value='')
- {
- $this->_setIni('error_append_string', (string) $value);
- return $this;
- }
-
- /**
- * Retourne la chaîne utilisé pour suffixer les messages d'erreur.
- *
- * @return string
- */
- public function getErrorAppendString()
- {
- return (string) ini_get('error_append_string');
- }
-
- /**
- * Nom du fichier où seront enregistrées les erreurs.
- * Le fichier doit être accessible en écriture par l'utilisateur
- * exécutant le serveur web.
- * indiquez soit le nom d'un fichier (exemple : /var/log/php/php_errors.log)
- * soit syslog pour que l'erreur soit enregistrée dans les logs système.
- * Si la valeur spéciale syslog est utilisée, les erreurs seront envoyées
- * au système d'historique du serveur.
- * Sous Unix, cela correspond à syslog(3) et sous Windows NT, à l'historique
- * d'événement.
- * Voir aussi : syslog(). Si cette directive n'est pas fixée, les erreurs
- * sont envoyées au journal d'erreurs SAPI. Par exemple, s'il s'agit d'une
- * erreur de journal dans Apache ou stderr dans CLI.
- *
- * @todo Vérifier la validité du path l'accesibilité en écriture du path ou du fichier
- *
- * @param string $value
- * @return FredT_Error_Config
- */
- public function setErrorLog($value=null)
- {
- $this->_setIni('error_log', (string) $value);
- return $this;
- }
-
- /**
- * Retourne le Nom du fichier où seront enregistrées les erreurs.
- *
- * @return string
- */
- public function getErrorLog()
- {
- return (string) ini_get('error_log');
- }
-
- /**
- * Taille maximale des messages d'erreurs qui seront enregistrés (octets)
- * Le message est tronqué, l'affichage de [Stack trace] sera réduit
- *
- * @param int $value
- * @return FredT_Error_Config
- */
- public function setLogErrorsMaxLen($value=1024)
- {
- $this->_setIni('log_errors_max_len', (int) $value);
- return $this;
- }
-
- /**
- * Retourne la Taille maximale des erreurs qui sont enregistrées (octets)
- *
- * @return int
- */
- public function getLogErrorsMaxLen()
- {
- $val = ini_get('log_errors_max_len');
- $last = strtolower($val{strlen($val)-1});
- switch($last) {
-
- case 'g':
- $val *= 1024;
- case 'm':
- $val *= 1024;
- case 'k':
- $val *= 1024;
- }
- return $val;
- }
-
- /**
- * Fixe le niveau du rapport d'erreur
- * La valeur maximale (pour E_ALL) peut changer,
- * on peut utiliser la valeur maximale 2147483647 pour tout couvrir
- * 6135 correspond à E_ALL & ~E_NOTICE
- *
- * @param int $value
- * @return FredT_Error_Config
- */
- public function setErrorReporting($value=6135)
- {
- $this->_setIni('error_reporting', (int) $value);
- return $this;
- }
-
- /**
- * Retourne le niveau du rapport d'erreur
- *
- * @return string
- */
- public function getErrorReporting()
- {
- return (int) ini_get('error_reporting');
- }
-
- /**
- * Retourne true si $errLevel est compris dans le niveau du rapport d'erreur
- *
- * @return boolean
- */
- public function isErrorReport($errLevel) {
- return ($this->getErrorReporting() & $errLevel)==$errLevel;
- }
-
- /**
- * Alias pour la fonction ini_set
- * Lance une exception si la config n'est pas appliquée
- *
- * @throws si ini_set retourne false, false pouvait être
- * la valeur originale, on vérifie donc si la nouvelle valeur est appliqué avant de lancer l'Exception
- *
- * @param string $varname
- * @param mixed $value
- */
- private function _setIni($varname, $value)
- {
- $result = ini_set($varname, $value);
- if (false===$result) {
- if ($value != ini_get($varname)) {
- throw new Exception('Config "' . $varname . '" non appliquée');
- }
- }
- }
- }
-
-
- ////////////////////////////////////////////
- ////////////////////////////////////////////
- /**
- * ------------- TESTs -------------
- * configuration pour la gestion d'erreur
- *
- * @example 1) avec les méthodes de classe
- */
- $errConf= new FredT_Error_Config();
- $errConf->setDisplayErrors(true)
- ->setDisplayStartupErrors(true)
- ->setLogErrors(true)
- ->setIgnoreRepeatedErrors(true)
- ->setIgnoreRepeatedSource(true)
- ->setReportMemleaks(true)
- ->setTrackErrors(true)
- ->setHtmlErrors(true)
- ->setDocrefRoot('http://www.php.net/manual/fr/')
- ->setDocrefExt('.php')
- ->setErrorLog('E:\\log_test_php.log')
- ->setLogErrorsMaxLen(1024)
- ->setErrorPrependString('<div class="erreur">')
- ->setErrorAppendString('</div>')
- ->setErrorReporting(FredT_Error_Config::E_ALL_EXTRA )
- ;
- try {
- $errConf->setWarnPlusOverloading(true);
- } catch (Exception $e) {}
-
- /**
- * @example 2) avec un array fourni au constructeur
- * ou également possible avec la méthode setConfig()
- *
- */
-
- /**
- * array avec les valeurs par défaut de php.ini
- * @var array
- */
- $defaultConf=array(
- 'DisplayErrors' => true,
- 'DisplayStartupErrors' => false,
- 'LogErrors' => false,
- 'IgnoreRepeatedErrors' => false,
- 'IgnoreRepeatedSource' => false,
- 'ReportMemleaks' => true,
- 'TrackErrors' => false,
- 'HtmlErrors' => true,
- 'WarnPlusOverloading' => null,
- 'DocrefRoot' => '',
- 'DocrefExt' => '',
- 'ErrorPrependString' => '',
- 'ErrorAppendString' => '',
- 'ErrorLog' => null,
- 'LogErrorsMaxLen' => 1024,
- 'ErrorReporting' => 6135 //E_ALL & ~E_NOTICE (attention, variable)
- );
- /**
- * configuration entièrement personnalisée
- * @var array
- */
- $conf=array(
- 'DisplayErrors' => true,
- 'DisplayStartupErrors' => true,
- 'LogErrors' => true,
- 'IgnoreRepeatedErrors' => false,
- 'IgnoreRepeatedSource' => false,
- 'ReportMemleaks' => true,
- 'TrackErrors' => true,
- 'HtmlErrors' => true,
- 'WarnPlusOverloading' => null, // todo Erreur
- 'DocrefRoot' => 'http://www.php.net/manual/fr/',
- 'DocrefExt' => '.php',
- 'ErrorPrependString' => '<div class="erreur">',
- 'ErrorAppendString' => '</div>',
- 'ErrorLog' => 'E:\\log_test_php.log',
- 'LogErrorsMaxLen' => 2048,
- 'ErrorReporting' => FredT_Error_Config::E_ALL_EXTRA
- );
- /**
- * configuration pour seulement revoir le comportement avec log
- * @var array
- */
- $confLog=array(
- 'LogErrors' => true,
- 'ErrorLog' => 'E:\\log_test_php.log',
- 'LogErrorsMaxLen' => 2048,
- );
-
- $errConf= new FredT_Error_Config($conf);
-
- /**
- * ------------- TESTs -------------
- * lecture de la configuration
- *
- */
- header ('Content-type: text/plain; charset=utf-8');
- /**
- * Méthode easy to use
- */
- echo ( $errConf->isErrorReport(E_NOTICE)
- ? 'Le rapport des E_NOTICE est activé'
- : 'Attention, il est souhaitable d\'activer le rapport des E_NOTICE'
- ) . "\n";
-
- /**
- * Simple vérif
- */
- $myConf= $errConf->getConfig();
- if($conf==$myConf){
- echo "\n".'Comparaison reverse $conf==$myConf : OK'."\n"."\n";
- } else {
- echo "\n".'Comparaison reverse $conf==$myConf : ECHEC'."\n"."\n";
- }
-
- /**
- * génère code à insérer dans un fichier .ini perso
- */
- echo '[section errorConfig]' . "\n";
- foreach ($myConf as $key => $value) {
- echo $key;
- echo str_repeat(' ', 30 - strlen($key));
- echo '= ';
- if (is_bool($value) ) {
- echo $value ? 'true' : 'false';
- } elseif (is_string($value)) {
- echo '"' . $value . '"';
- } elseif (is_int($value)) {
- echo $value;
- } else {
- echo $value;
- }
- echo "\n";
- }
<?php
/**
* @author Fred
* @category FredT Library
* @package Error
* @subpackage
* @version 29/12/2007
*
*/
class FredT_Error_Config {
/**
* Niveau d'erreur évolutif
* La valeur maximale (pour E_ALL) peut changer,
*/
const E_ALL_EXTRA = 2147483647;
/**
* Tableau vide utilisé comme modèle la valeur retourné par getConfig()
*
* @var array
*/
protected $_conf=array(
'ErrorReporting' => null,
'DisplayStartupErrors' => null,
'IgnoreRepeatedErrors' => null,
'IgnoreRepeatedSource' => null,
'ReportMemleaks' => null,
'TrackErrors' => null,
'WarnPlusOverloading' => null,
'DisplayErrors' => null,
'HtmlErrors' => null,
'DocrefRoot' => null,
'DocrefExt' => null,
'ErrorPrependString' => null,
'ErrorAppendString' => null,
'LogErrors' => null,
'ErrorLog' => null,
'LogErrorsMaxLen' => null,
);
/**
* Affecte automatiquement la configuration pour la gestion d'erreur
*
* @see setConfig()
*
* @param array $conf facultatif
*/
function __construct(Array $conf=array())
{
$this->setConfig($conf);
}
/**
* Renvoi le tableau complet des paramètres de configuration actuels
*
* @see setConfig()
*
* @return array
*/
public function getConfig()
{
$conf=array();
foreach ($this->_conf as $key => $value) {
$param= 'get' . $key;
if (method_exists($this, $param)) {
$conf[$key] = $this->$param();
}
}
return $conf;
}
/**
* Affecte la configuration pour la gestion d'erreur
*
* @see http://www.php.net/manual/fr/ref.errorfunc.php
*
* @param array $conf
*/
public function setConfig(Array $conf=array() )
{
foreach ($conf as $param => $value) {
$param= 'set' . $param;
if (method_exists($this, $param)) {
$this->$param($value);
}
}
return $this;
}
/**
* Détermine si les erreurs doivent être affichées à l'écran ou non.
*
* @param boolean $value
* @return FredT_Error_Config
*/
public function setDisplayErrors($value=true)
{
$this->_setIni('display_errors', (bool) $value);
return $this;
}
/**
* Retourne si les erreurs sont affichées à l'écran ou non.
*
* @return boolean
*/
public function getDisplayErrors()
{
return (bool) ini_get('display_errors');
}
/**
* Afficher les erreurs qui peuvent survenir lors de la séquence de démarrage de PHP
* Recommandé pour le débogage, fortement déconseillé en Prod
*
* @param boolean $value
* @return FredT_Error_Config
*/
public function setDisplayStartupErrors($value=false)
{
$this->_setIni('display_startup_errors', (bool) $value);
return $this;
}
/**
* Retourne si les erreurs qui peuvent survenir lors de la séquence de démarrage
* de PHP sont affichées à l'écran ou non.
*
* @return boolean
*/
public function getDisplayStartupErrors()
{
return (bool) ini_get('display_startup_errors');
}
/**
* Ecrit les messages d'erreur soit dans l'historique du serveur ou dans error_log.
*
* @param boolean $value
* @return FredT_Error_Config
*/
public function setLogErrors($value=false)
{
$this->_setIni('log_errors', (bool) $value);
return $this;
}
/**
* Retourne si les messages d'erreur sont écrits soit dans l'historique du serveur
* ou dans error_log.
*
* @return boolean
*/
public function getLogErrors()
{
return (bool) ini_get('log_errors');
}
/**
* Ne pas enregistrer des messages répétitifs
* (Provenance du même fichier et même ligne)
*
* @param boolean $value
* @return FredT_Error_Config
*/
public function setIgnoreRepeatedErrors($value=false)
{
$this->_setIni('ignore_repeated_errors', (bool) $value);
return $this;
}
/**
* Retourne si les messages répétitifs sont enregistrés
* (Provenance du même fichier et même ligne)
* ou dans error_log.
*
* @return boolean
*/
public function getIgnoreRepeatedErrors()
{
return (bool) ini_get('ignore_repeated_errors');
}
/**
* Permet d'éviter d'enregistrer les erreurs provenant du même fichier source.
* N'est effectif seulement si ignore_repeated_errors est activée.
* (Provenance du même fichier)
*
* @param boolean $value
* @return FredT_Error_Config
*/
public function setIgnoreRepeatedSource($value=false)
{
$this->_setIni('ignore_repeated_source', (bool) $value);
return $this;
}
/**
* Retourne si les erreurs provenant d'un même fichier source sont enregistrés
* N'est effectif seulement si ignore_repeated_errors est activée.
* (Provenance du même fichier)
*
* @return boolean
*/
public function getIgnoreRepeatedSource()
{
return (bool) ini_get('ignore_repeated_source');
}
/**
* A false, les fuites de mémoires seront ignorées.
* Option valable si PHP compilé avec l'option de débogage,
* et si error_reporting inclut E_WARNING
*
* @param boolean $value
* @return FredT_Error_Config
*/
public function setReportMemleaks($value=true)
{
$this->_setIni('report_memleaks', (bool) $value);
return $this;
}
/**
* Retourne false si les fuites de mémoires sont ignorées
* Option valable si PHP compilé avec l'option de débogage,
* et si error_reporting inclut E_WARNING
*
* @return boolean
*/
public function getReportMemleaks()
{
return (bool) ini_get('report_memleaks');
}
/**
* A True, le dernier message d'erreur sera placé dans
* la variable globale $php_errormsg.
*
* @param boolean $value
* @return FredT_Error_Config
*/
public function setTrackErrors($value=false)
{
$this->_setIni('track_errors', (bool) $value);
return $this;
}
/**
* Retourne True si le dernier message d'erreur est placé dans
* la variable globale $php_errormsg.
*
* @return boolean
*/
public function getTrackErrors()
{
return (bool) ini_get('track_errors');
}
/**
* A True, Active les balises HTML dans les messages d'erreurs.
* la variable globale $php_errormsg.
*
* @param boolean $value
* @return FredT_Error_Config
*/
public function setHtmlErrors($value=true)
{
$this->_setIni('html_errors', (bool) $value);
return $this;
}
/**
* Retourne True si les balises HTML dans les messages d'erreurs sont activées
*
* @return boolean
*/
public function getHtmlErrors()
{
return (bool) ini_get('html_errors');
}
/**
* A True PHP affiche une alerte lorsque l'opérateur (+) est utilisé
* avec des chaînes de caractères.
* ATTENTION: modifiable? La doc PHP indique "PHP_INI??"
*
* @param boolean $value
* @return FredT_Error_Config
*/
public function setWarnPlusOverloading($value=null)
{
$this->_setIni('warn_plus_overloading', (bool) $value);
return $this;
}
/**
* Retourne True PHP affiche une alerte lorsque l'opérateur (+) est utilisé
* avec des chaînes de caractères.
*
* @return boolean
*/
public function getWarnPlusOverloading()
{
return (bool) ini_get('warn_plus_overloading');
}
/**
* Des messages avec liens hypertexte, redirige vers la documentation
* de l'erreur ou de la fonction. Défini le lien vers le manuel PHP
* à utiliser si html_errors est activée.
* Ne pas utiliser sur un système de production
* @todo La valeur de l'URL n'est pas vérifier
*
* @example
* Avec une copie locale: "/manual/php/"
* Avec une référence externe: "http://www.php.net/manual/fr/"
*
* @param string $value
* @return FredT_Error_Config
*/
public function setDocrefRoot($value='')
{
$this->_setIni('docref_root', (string) $value);
return $this;
}
/**
* Retourne le lien utilisé vers le manuel PHP
* Valable Seulement si html_errors est activée.
*
* @return string
*/
public function getDocrefRoot()
{
return (string) ini_get('docref_root');
}
/**
* A configurer en complément de docref_root.
* La valeur doit commencer par un point '.'
* et correspondre aux extensions du manuel.
*
* @example
* ".php"
*
* @param string $value
* @return FredT_Error_Config
*/
public function setDocrefExt($value='')
{
$this->_setIni('docref_ext', (string) $value);
return $this;
}
/**
* Retourne l'extension des pages utilisé pour le manuel PHP
*
* @return string
*/
public function getDocrefExt()
{
return (string) ini_get('docref_ext');
}
/**
* Chaîne qui sera utilisé pour préfixer les messages d'erreur.
* peut très bien être du code HTML.
*
* @param string $value
* @return FredT_Error_Config
*/
public function setErrorPrependString($value='')
{
$this->_setIni('error_prepend_string', (string) $value);
return $this;
}
/**
* Retourne la chaîne utilisé pour préfixer les messages d'erreur.
*
* @return string
*/
public function getErrorPrependString()
{
return (string) ini_get('error_prepend_string');
}
/**
* Chaîne qui sera utilisé pour suffixer les messages d'erreur.
* peut très bien être du code HTML.
*
* @param string $value
* @return FredT_Error_Config
*/
public function setErrorAppendString($value='')
{
$this->_setIni('error_append_string', (string) $value);
return $this;
}
/**
* Retourne la chaîne utilisé pour suffixer les messages d'erreur.
*
* @return string
*/
public function getErrorAppendString()
{
return (string) ini_get('error_append_string');
}
/**
* Nom du fichier où seront enregistrées les erreurs.
* Le fichier doit être accessible en écriture par l'utilisateur
* exécutant le serveur web.
* indiquez soit le nom d'un fichier (exemple : /var/log/php/php_errors.log)
* soit syslog pour que l'erreur soit enregistrée dans les logs système.
* Si la valeur spéciale syslog est utilisée, les erreurs seront envoyées
* au système d'historique du serveur.
* Sous Unix, cela correspond à syslog(3) et sous Windows NT, à l'historique
* d'événement.
* Voir aussi : syslog(). Si cette directive n'est pas fixée, les erreurs
* sont envoyées au journal d'erreurs SAPI. Par exemple, s'il s'agit d'une
* erreur de journal dans Apache ou stderr dans CLI.
*
* @todo Vérifier la validité du path l'accesibilité en écriture du path ou du fichier
*
* @param string $value
* @return FredT_Error_Config
*/
public function setErrorLog($value=null)
{
$this->_setIni('error_log', (string) $value);
return $this;
}
/**
* Retourne le Nom du fichier où seront enregistrées les erreurs.
*
* @return string
*/
public function getErrorLog()
{
return (string) ini_get('error_log');
}
/**
* Taille maximale des messages d'erreurs qui seront enregistrés (octets)
* Le message est tronqué, l'affichage de [Stack trace] sera réduit
*
* @param int $value
* @return FredT_Error_Config
*/
public function setLogErrorsMaxLen($value=1024)
{
$this->_setIni('log_errors_max_len', (int) $value);
return $this;
}
/**
* Retourne la Taille maximale des erreurs qui sont enregistrées (octets)
*
* @return int
*/
public function getLogErrorsMaxLen()
{
$val = ini_get('log_errors_max_len');
$last = strtolower($val{strlen($val)-1});
switch($last) {
case 'g':
$val *= 1024;
case 'm':
$val *= 1024;
case 'k':
$val *= 1024;
}
return $val;
}
/**
* Fixe le niveau du rapport d'erreur
* La valeur maximale (pour E_ALL) peut changer,
* on peut utiliser la valeur maximale 2147483647 pour tout couvrir
* 6135 correspond à E_ALL & ~E_NOTICE
*
* @param int $value
* @return FredT_Error_Config
*/
public function setErrorReporting($value=6135)
{
$this->_setIni('error_reporting', (int) $value);
return $this;
}
/**
* Retourne le niveau du rapport d'erreur
*
* @return string
*/
public function getErrorReporting()
{
return (int) ini_get('error_reporting');
}
/**
* Retourne true si $errLevel est compris dans le niveau du rapport d'erreur
*
* @return boolean
*/
public function isErrorReport($errLevel) {
return ($this->getErrorReporting() & $errLevel)==$errLevel;
}
/**
* Alias pour la fonction ini_set
* Lance une exception si la config n'est pas appliquée
*
* @throws si ini_set retourne false, false pouvait être
* la valeur originale, on vérifie donc si la nouvelle valeur est appliqué avant de lancer l'Exception
*
* @param string $varname
* @param mixed $value
*/
private function _setIni($varname, $value)
{
$result = ini_set($varname, $value);
if (false===$result) {
if ($value != ini_get($varname)) {
throw new Exception('Config "' . $varname . '" non appliquée');
}
}
}
}
////////////////////////////////////////////
////////////////////////////////////////////
/**
* ------------- TESTs -------------
* configuration pour la gestion d'erreur
*
* @example 1) avec les méthodes de classe
*/
$errConf= new FredT_Error_Config();
$errConf->setDisplayErrors(true)
->setDisplayStartupErrors(true)
->setLogErrors(true)
->setIgnoreRepeatedErrors(true)
->setIgnoreRepeatedSource(true)
->setReportMemleaks(true)
->setTrackErrors(true)
->setHtmlErrors(true)
->setDocrefRoot('http://www.php.net/manual/fr/')
->setDocrefExt('.php')
->setErrorLog('E:\\log_test_php.log')
->setLogErrorsMaxLen(1024)
->setErrorPrependString('<div class="erreur">')
->setErrorAppendString('</div>')
->setErrorReporting(FredT_Error_Config::E_ALL_EXTRA )
;
try {
$errConf->setWarnPlusOverloading(true);
} catch (Exception $e) {}
/**
* @example 2) avec un array fourni au constructeur
* ou également possible avec la méthode setConfig()
*
*/
/**
* array avec les valeurs par défaut de php.ini
* @var array
*/
$defaultConf=array(
'DisplayErrors' => true,
'DisplayStartupErrors' => false,
'LogErrors' => false,
'IgnoreRepeatedErrors' => false,
'IgnoreRepeatedSource' => false,
'ReportMemleaks' => true,
'TrackErrors' => false,
'HtmlErrors' => true,
'WarnPlusOverloading' => null,
'DocrefRoot' => '',
'DocrefExt' => '',
'ErrorPrependString' => '',
'ErrorAppendString' => '',
'ErrorLog' => null,
'LogErrorsMaxLen' => 1024,
'ErrorReporting' => 6135 //E_ALL & ~E_NOTICE (attention, variable)
);
/**
* configuration entièrement personnalisée
* @var array
*/
$conf=array(
'DisplayErrors' => true,
'DisplayStartupErrors' => true,
'LogErrors' => true,
'IgnoreRepeatedErrors' => false,
'IgnoreRepeatedSource' => false,
'ReportMemleaks' => true,
'TrackErrors' => true,
'HtmlErrors' => true,
'WarnPlusOverloading' => null, // todo Erreur
'DocrefRoot' => 'http://www.php.net/manual/fr/',
'DocrefExt' => '.php',
'ErrorPrependString' => '<div class="erreur">',
'ErrorAppendString' => '</div>',
'ErrorLog' => 'E:\\log_test_php.log',
'LogErrorsMaxLen' => 2048,
'ErrorReporting' => FredT_Error_Config::E_ALL_EXTRA
);
/**
* configuration pour seulement revoir le comportement avec log
* @var array
*/
$confLog=array(
'LogErrors' => true,
'ErrorLog' => 'E:\\log_test_php.log',
'LogErrorsMaxLen' => 2048,
);
$errConf= new FredT_Error_Config($conf);
/**
* ------------- TESTs -------------
* lecture de la configuration
*
*/
header ('Content-type: text/plain; charset=utf-8');
/**
* Méthode easy to use
*/
echo ( $errConf->isErrorReport(E_NOTICE)
? 'Le rapport des E_NOTICE est activé'
: 'Attention, il est souhaitable d\'activer le rapport des E_NOTICE'
) . "\n";
/**
* Simple vérif
*/
$myConf= $errConf->getConfig();
if($conf==$myConf){
echo "\n".'Comparaison reverse $conf==$myConf : OK'."\n"."\n";
} else {
echo "\n".'Comparaison reverse $conf==$myConf : ECHEC'."\n"."\n";
}
/**
* génère code à insérer dans un fichier .ini perso
*/
echo '[section errorConfig]' . "\n";
foreach ($myConf as $key => $value) {
echo $key;
echo str_repeat(' ', 30 - strlen($key));
echo '= ';
if (is_bool($value) ) {
echo $value ? 'true' : 'false';
} elseif (is_string($value)) {
echo '"' . $value . '"';
} elseif (is_int($value)) {
echo $value;
} else {
echo $value;
}
echo "\n";
}
Conclusion
/** * @todo - créer des fonction simplifiée (avec plusieurs arguments) * qui regroupe tout ce qui concerne le log par exemple * ou tout ce qui concerne l'affichage de rapport, en HTML ... * note: plutôt étendre cette classe pour implémenter ces fonctions. * - implémenter un pattern singleton pour cette classe ? * - méthode ErrorHandlerFactory() * - méthode ExceptionHandlerFactory() */
Historique
- 29 décembre 2007 18:37:41 :
- Création source.
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Configuration PHP [ par guiguimac ]
Bonjour,j'utilise la version PHP Suivante :PHP Version 4.0.4pl1mais je n'y connais rien en config.j'ai un script qui utilise $_GET["Mavar"]ca marche s
Messages d'erreurs avec EasyPHP [ par laubro ]
Bonjour à tous et merci de votre aide,Voilà, je débute en PHP et pour me faire la main, j'ai pris EasyPHP qui semble être le prog
Recherche MySQL [ par restesouple ]
Bonjour,En fait je n'arrive pas à utliser les formulaire pour faire un moteur de recherche, j'ai lu plusieurs codes et essayé ca ne fonction
"config.ini" d'un site + qq explications sur les includes [ par allanvdk ]
Bonjour à tous, Je bloque toujours sur le même problème. Qui pourrait m'expliquer1/ les bases d' un fichier du style « config.ini
Limiter les erreurs [ par 3xodius55 ]
Bonsoir tout le monde, voici le probleme: dans un premier formulaire, je saisis un numero et dans le second, je veux verifier si ce numero est exist
Gestionnaire vidéos avec top 10 des + téléchargés et mieux notés [ par masseur ]
salut. Je voudrais mettre en place une sorte de top but pour pro evolution soccer 4. Auriez vous un scipt à me proposer qui aurait deja une bonne
include config et sécurité? [ par stroubinou ]
Bonjour! Voila, je vous explique mon probleme, j'ai une galerie photo (visible ici ) ... je l'ai installée chez un copain (ben ouai, faut bien se
modifier un fichier php [ par xactise ]
Bonjours j'ai un petit problème j'arrive pas à trouver ! Je vous expliqueJ'ai un fichier config.php (../config/config.php) qui contient plei
PHP et Mysql : ou sont les erreurs ? [ par hitman06 ]
Bonjour, j'essai de faire un script en PHP, mais je rencontre plusieurs erreurs.Tout d'abord, pouvez-vous me dire ce qui ne va pas ici : &n
configuration de RAID 5 [ par foblar ]
foblarje souhaite savoir comment configurer le système RAID 5 de mon serveur.il a 4 disques donc 1 disque de 30Go et trois autre d
|
Derniers Blogs
[SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|