Description
string
set_error_handler
( string error_handler)
set_error_handler(
)
choisit
la
fonction
utilisateur
error_handler
pour
gérer
les
erreurs
dans
un
script
.
Retourne
un
pointeur
sur
l'
ancienne
fonction
de
gestion
des
erreurs
(si
il
y
en
avait
une)
,
ou
FALSE
,
en
cas
d'erreur
.
set_error_handler(
)
sert
à
définir
votre
propre
gestionnaire
d'erreurs
,
qui
prendra
en
charge
leur
traitement
durant
l'exécution
d
'un
script
.
Cela
peut
être
utile
lorsque
vous
devez
repérer
des
erreurs
critiques
lors
d'
un
nettoyage
de
bases
,
ou
bien
si
vous
souhaitez
générer
une
erreur
dans
certaines
conditions
(avec
trigger_error(
)
)
.
La
fonction
utilisateur
doit
accepter
deux
arguments
:
le
code
de
l'
erreur
,
et
une
chaîne
décrivant
l
'erreur
.
L'
exemple
ci
dessous
montre
le
traitement
d
'exceptions
en
déclenchant
des
erreurs
,
et
en
les
gérant
avec
une
fonction
utilisateur
:
Exemple
1
.
Traitement
des
erreurs
avec
set_error_handler(
)
et
trigger_error(
)
?php
/
/
redéfinit
les
constantes
utilisateurs
-
PHP
4
seulement
define
(
FATAL,E_USER_ERROR)
;
define
(ERROR,E_USER_WARNING)
;
define
(WARNING,E_USER_NOTICE)
;
/
/
Fixe
le
niveau
de
rapport
d'erreur
pour
ce
script
error_reporting
(FATAL
+
ERROR
+
WARNING)
;
/
/
Fonction
de
traitement
des
erreurs
function
myErrorHandler
($errno
,
$errstr
)
{
switch
($errno
)
{
case
FATAL
:
echo
"
B
FATAL
/
B
[$errno
]
$errstr
br
\n"
;
echo
"
Erreur
fatale
à
la
ligne
".__LINE__
.
"
du
fichier
".__FILE__
;
echo
"
,
PHP
".PHP_VERSION
.
"
(".PHP_OS
."
)
br
\n"
;
echo
"Aborting..
.
br
\n"
;
exit
-1
;
break
;
case
ERROR
:
echo
"
B
ERREUR
/
B
[$errno
]
$errstr
br
\n"
;
break
;
case
WARNING
:
echo
"
B
ALERTE
/
B
[$errno
]
$errstr
br
\n"
;
break
;
default
:
echo
"Erreur
inconnue
de
type
:
[$errno
]
$errstr
br
\n"
;
break
;
}
}
/
/
fonction
qui
teste
la
gestion
d'erreur
function
scale_by_log
($vect
,
$scale
)
{
if
(
!is_numeric($scale
)
|
|
$scale
=
0
)
trigger_error("log(x
)
pour
x
=
0
est
indéfini
,
vous
avez
passé
:
scale
=
$scale"
,
FATAL)
;
if
(!is_array($vect)
)
{
trigger_error("Vecteur
d'entrée
incorrect
:
un
tableau
de
valeurs
est
attendu
:
"
,
ERROR)
;
return
null
;
}
for
($i=0
;
$i
count($vect)
;
$i++
)
{
if
(!is_numeric($vect[$i])
)
trigger_error("La
valeur
à
la
position
$i
n
'est
pas
un
nombre
.
On
utilise
0
(
zéro
)
à
la
place"
,
WARNING)
;
$temp[$i
]
=
log($scale
)
*
$vect[$i]
;
}
return
$temp
;
}
/
/
Ancienne
fonction
de
traitement
des
erreurs
$old_error_handler
=
set_error_handler("myErrorHandler")
;
/
/
Génération
de
quelques
erreurs
:
définition
d'un
tableau
avec
des
éléments
non
numériques
echo
"vector
a\n"
;
$a
=
array(2,3
,"foo",5.5,43.3,21.11)
;
print_r($a)
;
/
/
définition
d'un
deuxième
table
à
problème
echo
"----\nvector
b
-
a
alerte
(b
=
log(PI
)
*
a)\n"
;
$b
=
scale_by_log($a
,
M_PI)
;
print_r($b)
;
/
/
Ceci
est
un
problème
,
on
passe
une
chaîne
à
la
place
d'un
tableau
echo
"----\nvector
c
-
une
erreur\n"
;
$c
=
scale_by_log("not
array",2.3)
;
var_dump($c)
;
/
/
Ceci
est
critique
:
le
tableau
contient
des
valeurs
négatives
echo
"----\nvector
d
-
fatal
error\n"
;
$d
=
scale_by_log($a
,
-2.5)
;
?
|
|
L'éxécution du script devrait donner ceci :
Il
faut
se
rappeler
que
la
fonction
standard
de
traitement
des
erreurs
de
PHP
est
alors
complètement
ignorée
.
error_reporting(
)
n'aura
plus
d
'effet
,
et
votre
fonction
de
gestion
des
erreurs
sera
toujours
appelée
.
Vous
pourrez
toujours
lire
la
valeur
de
l'
erreur
courante
de
error_reporting(
)
et
faire
réagir
la
fonction
de
gestion
des
erreurs
en
fonction
.
Cette
remarque
est
notamment
valable
si
la
commande
a
été
préfixée
par
@
(
0
sera
retourné
)
.
Notez
aussi
qu'
il
est
alors
confié
à
cette
fonction
de
terminer
le
script
(
die(
)
)
si
nécessaire
.
Si
la
fonction
de
gestion
des
erreurs
se
termine
normalement
,
l'
exécution
du
script
se
poursuivra
avec
l
'exécution
de
la
prochaine
commande
.
Voir
aussi
error_reporting(
)
,
restore_error_handler(
)
,
trigger_error(
)
et
user_error(
)