set_error_handler

set_error_handler -- Choisi une fonction utilisateur comme gestionnaire d'erreurs

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 :
 
vector

 
a

 
Array

 
(

 
[0

 
]

 
=

 
2

 
[1

 
]

 
=

 
3

 
[2

 
]

 
=

 
foo

 
[3

 
]

 
=

 
5.5

 
[4

 
]

 
=

 
43.3

 
[5

 
]

 
=

 
21.11

 
)

 
---

 
-

 
vector

 
b

 
-

 
une

 
alerte

 
(b

 
=

 
log(PI

 
)

 
*

 
a

 
)

 
B

 
WARNING

 
/

 
B

 
[1024

 
]

 
La

 
valeur

 
à

 
la

 
position

 
2

 
n

 
'est

 
pas

 
un

 
nombre

 
.




 
On

 
utilise

 
0

 
(

 
zéro

 
)

 
à

 
la

 
place

 
br

 
Array

 
(

 
[0

 
]

 
=

 
2.2894597716988

 
[1

 
]

 
=

 
3.4341896575482

 
[2

 
]

 
=

 
0

 
[3

 
]

 
=

 
6.2960143721717

 
[4

 
]

 
=

 
49.566804057279

 
[5

 
]

 
=

 
24.165247890281

 
)

 
---

 
-

 
vector

 
c

 
-

 
an

 
error

 
B

 
ERROR

 
/

 
B

 
[512

 
]

 
Vecteur

 
d'entrée

 
incorrect

 
:

 
un

 
tableau

 
de

 
valeur

 
est

 
attendu

 
br

 
NULL

 
---

 
-

 
vector

 
d

 
-

 
fatal

 
error

 
B

 
FATAL

 
/

 
B

 
[256

 
]

 
log(x

 
)

 
de

 
x

 
=

 
0

 
est

 
indéfini

 
:

 
scale

 
=

 
-2.5

 
br

 
Erreur

 
fatale

 
à

 
la

 
ligne

 
16

 
du

 
fichier

 
trigger_error.php

 
,

 
PHP

 
4.0.1pl2

 
(Linux

 
)

 
br

 
Annulation

 
du

 
script...

 
.

 
br





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( )