Files
doc-fr/reference/errorfunc/functions/set-error-handler.xml
T
Hartmut Holzgraefe b8daeaab85 banana-split
git-svn-id: https://svn.php.net/repository/phpdoc/fr/trunk@78204 c90b9560-bf6c-de11-be94-00142212c4b1
2002-04-15 00:40:38 +00:00

190 lines
7.1 KiB
XML

<?xml version="1.0" encoding="iso-8859-1"?>
<!-- splitted from ./fr/functions/errorfunc.xml, last change in rev 1.10 -->
<!-- last change to 'set-error-handler' in en/ tree in rev 1.1 -->
<refentry id="function.set-error-handler">
<refnamediv>
<refname>set_error_handler</refname>
<refpurpose>
Choisi une fonction utilisateur comme gestionnaire d'erreurs
</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<methodsynopsis>
<type>string</type><methodname>set_error_handler</methodname>
<methodparam><type>string</type><parameter>error_handler</parameter></methodparam>
</methodsynopsis>
<para>
<function>set_error_handler</function> choisit la fonction utilisateur
<parameter>error_handler</parameter> pour g&eacute;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.
<function>set_error_handler</function> sert &agrave; d&eacute;finir votre
propre gestionnaire d'erreurs, qui prendra en charge leur traitement durant
l'ex&eacute;cution d'un script. Cela peut &ecirc;tre utile lorsque vous
devez rep&eacute;rer des erreurs critiques lors d'un nettoyage de bases, ou
bien si vous souhaitez g&eacute;n&eacute;rer une erreur dans certaines
conditions (avec <function>trigger_error</function>).
</para>
<para>
La fonction utilisateur doit accepter deux arguments : le code de l'erreur,
et une cha&icirc;ne d&eacute;crivant l'erreur. L'exemple ci dessous montre
le traitement d'exceptions en d&eacute;clenchant des erreurs, et en les
g&eacute;rant avec une fonction utilisateur :
<example>
<title>
Traitement des erreurs avec <function>set_error_handler</function> et
<function>trigger_error</function>
</title>
<programlisting role="php">
&lt;?php
// red&eacute;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 &quot;&lt;B&gt;FATAL&lt;/B&gt; [$errno] $errstr&lt;br&gt;\n&quot;;
echo &quot; Erreur fatale &agrave; la ligne &quot;.__LINE__.&quot; du fichier &quot;.__FILE__;
echo &quot;, PHP &quot;.PHP_VERSION.&quot; (&quot;.PHP_OS.&quot;)&lt;br&gt;\n&quot;;
echo &quot;Aborting...&lt;br&gt;\n&quot;;
exit -1;
break;
case ERROR:
echo &quot;&lt;B&gt;ERREUR&lt;/B&gt; [$errno] $errstr&lt;br&gt;\n&quot;;
break;
case WARNING:
echo &quot;&lt;B&gt;ALERTE&lt;/B&gt; [$errno] $errstr&lt;br&gt;\n&quot;;
break;
default:
echo &quot;Erreur inconnue de type : [$errno] $errstr&lt;br&gt;\n&quot;;
break;
}
}
// fonction qui teste la gestion d'erreur
function scale_by_log ($vect, $scale) {
if ( !is_numeric($scale) || $scale &lt;= 0 )
trigger_error(&quot;log(x) pour x &lt;= 0 est ind&eacute;fini, vous avez pass&eacute;: scale = $scale&quot;,
FATAL);
if (!is_array($vect)) {
trigger_error(&quot;Vecteur d'entr&eacute;e incorrect : un tableau de valeurs est attendu : &quot;, ERROR);
return null;
}
for ($i=0; $i&lt;count($vect); $i++) {
if (!is_numeric($vect[$i]))
trigger_error(&quot;La valeur &agrave; la position $i n'est pas un nombre. On utilise 0 (z&eacute;ro) &agrave; la place&quot;,
WARNING);
$temp[$i] = log($scale) * $vect[$i];
}
return $temp;
}
// Ancienne fonction de traitement des erreurs
$old_error_handler = set_error_handler(&quot;myErrorHandler&quot;);
// G&eacute;n&eacute;ration de quelques erreurs : d&eacute;finition d'un tableau avec des &eacute;l&eacute;ments non num&eacute;riques
echo &quot;vector a\n&quot;;
$a = array(2,3,&quot;foo&quot;,5.5,43.3,21.11);
print_r($a);
// d&eacute;finition d'un deuxi&egrave;me table &agrave; probl&egrave;me
echo &quot;----\nvector b - a alerte (b = log(PI) * a)\n&quot;;
$b = scale_by_log($a, M_PI);
print_r($b);
// Ceci est un probl&egrave;me, on passe une cha&icirc;ne &agrave; la place d'un tableau
echo &quot;----\nvector c - une erreur\n&quot;;
$c = scale_by_log(&quot;not array&quot;,2.3);
var_dump($c);
// Ceci est critique : le tableau contient des valeurs n&eacute;gatives
echo &quot;----\nvector d - fatal error\n&quot;;
$d = scale_by_log($a, -2.5);
?&gt;
</programlisting>
</example>
L'&eacute;x&eacute;cution du script devrait donner ceci :
<informalexample>
<programlisting>
vector a
Array
(
[0] =&gt; 2
[1] =&gt; 3
[2] =&gt; foo
[3] =&gt; 5.5
[4] =&gt; 43.3
[5] =&gt; 21.11
)
----
vector b - une alerte (b = log(PI) * a)
&lt;B&gt;WARNING&lt;/B&gt; [1024] La valeur &agrave; la position 2 n'est pas un nombre. On utilise 0 (z&eacute;ro) &agrave; la place&lt;br&gt;
Array
(
[0] =&gt; 2.2894597716988
[1] =&gt; 3.4341896575482
[2] =&gt; 0
[3] =&gt; 6.2960143721717
[4] =&gt; 49.566804057279
[5] =&gt; 24.165247890281
)
----
vector c - an error
&lt;B&gt;ERROR&lt;/B&gt; [512] Vecteur d'entr&eacute;e incorrect : un tableau de valeur est attendu&lt;br&gt;
NULL
----
vector d - fatal error
&lt;B&gt;FATAL&lt;/B&gt; [256] log(x) de x &lt;= 0 est ind&eacute;fini : scale = -2.5&lt;br&gt;
Erreur fatale &agrave; la ligne 16 du fichier trigger_error.php, PHP 4.0.1pl2 (Linux)&lt;br&gt;
Annulation du script....&lt;br&gt;
</programlisting>
</informalexample>
</para>
<para>
Il faut se rappeler que la fonction standard de traitement des erreurs
de PHP est alors compl&egrave;tement ignor&eacute;e.
<function>error_reporting</function>
n'aura plus d'effet, et votre fonction de gestion des
erreurs sera toujours appel&eacute;e. Vous pourrez toujours lire la valeur
de l'erreur courante de <function>error_reporting</function> et
faire r&eacute;agir la fonction de gestion des erreurs en fonction.
Cette remarque est notamment valable si la commande a &eacute;t&eacute;
pr&eacute;fix&eacute;e par <link linkend="language.operators.errorcontrol">&#64;</link>
(0 sera retourn&eacute;).
</para>
<para>
Notez aussi qu'il est alors confi&eacute; &agrave; cette fonction de
terminer le script (<function>die</function>) si n&eacute;cessaire. Si la
fonction de gestion des erreurs se termine normalement, l'ex&eacute;cution
du script se poursuivra avec l'ex&eacute;cution de la prochaine commande.
</para>
<para>
Voir aussi
<function>error_reporting</function>,
<function>restore_error_handler</function>,
<function>trigger_error</function> et
<function>user_error</function>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->