mirror of
https://github.com/php/doc-it.git
synced 2026-03-27 00:52:07 +01:00
git-svn-id: https://svn.php.net/repository/phpdoc/it/trunk@78500 c90b9560-bf6c-de11-be94-00142212c4b1
205 lines
6.6 KiB
XML
205 lines
6.6 KiB
XML
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
<!-- splitted from ./it/functions/errorfunc.xml, last change in rev 1.1 -->
|
|
<!-- last change to 'set-error-handler' in en/ tree in rev 1.1 -->
|
|
<!-- EN-Revision: 1.2 Maintainer: pulici Status: ready -->
|
|
<!-- OLD-Revision: 1.27/EN.1.1 -->
|
|
<refentry id="function.set-error-handler">
|
|
<refnamediv>
|
|
<refname>set_error_handler</refname>
|
|
<refpurpose>
|
|
Configura una funzione di gestione dell'errore definita dall'utente.
|
|
</refpurpose>
|
|
</refnamediv>
|
|
<refsect1>
|
|
<title>Descrizione</title>
|
|
<methodsynopsis>
|
|
<type>string</type><methodname>set_error_handler</methodname>
|
|
<methodparam><type>string</type><parameter>error_handler</parameter></methodparam>
|
|
</methodsynopsis>
|
|
<para>
|
|
Configura una funzione utente (<parameter>error_handler</parameter> per
|
|
gestire gli errori in uno script. Restituisce, se esistente, il precedente
|
|
gestore degli errori, o &false; in caso di errore. Questa funzione può
|
|
essere utilizzata per definire un sistema personalizzato di gestione degli
|
|
errori durante l'esecuzione, per esempio in applicazioni dove sia
|
|
necessario svuotare dati o file in caso di un determinato errore
|
|
critico, o quando sia necessario, in determinate condizioni, attivare
|
|
un errore (con <function>trigger_error</function>)
|
|
</para>
|
|
<para>
|
|
La funzione utente richiede 2 parametri: il codice errore e una stringa
|
|
descrittiva dell'errore. Da PHP 4.0.2, è possibile opzionalmente fornire
|
|
altri 3 parametri aggiuntivi: il nome del file, il numero di riga e il
|
|
contesto dove è avvenuto l'errore (un array che punto alla tabella
|
|
dei simboli attiva nel punto in cui è avvenuto l'errore).
|
|
</para>
|
|
<para>
|
|
L'esempio sottostante mostra la gestione
|
|
delle eccezioni interne attivando gli errori e gestendoli tramite
|
|
una funzione definita dall'utente:
|
|
<example>
|
|
<title>
|
|
Gestione errori con <function>set_error_handler</function> e
|
|
<function>trigger_error</function>
|
|
</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
|
|
// ridefinisce la costante dell'errore utente - solo PHP 4
|
|
define (FATAL,E_USER_ERROR);
|
|
define (ERROR,E_USER_WARNING);
|
|
define (WARNING,E_USER_NOTICE);
|
|
|
|
// configura il livello di restituzione errore per questo script
|
|
error_reporting (FATAL | ERROR | WARNING);
|
|
|
|
// funzione di gestione dell'errore
|
|
function myErrorHandler ($errno, $errstr, $errfile, $errline) {
|
|
switch ($errno) {
|
|
case FATAL:
|
|
echo "<b>FATAL</b> [$errno] $errstr<br>\n";
|
|
echo " Fatal error in line ".$errline." of file ".$errfile;
|
|
echo ", PHP ".PHP_VERSION." (".PHP_OS.")<br>\n";
|
|
echo "Aborting...<br>\n";
|
|
exit 1;
|
|
break;
|
|
case ERROR:
|
|
echo "<b>ERROR</b> [$errno] $errstr<br>\n";
|
|
break;
|
|
case WARNING:
|
|
echo "<b>WARNING</b> [$errno] $errstr<br>\n";
|
|
break;
|
|
default:
|
|
echo "Unkown error type: [$errno] $errstr<br>\n";
|
|
break;
|
|
}
|
|
}
|
|
|
|
// funzione di prova del gestore di errore
|
|
function scale_by_log ($vect, $scale) {
|
|
if ( !is_numeric($scale) || $scale <= 0 )
|
|
trigger_error("log(x) for x <= 0 is undefined, you used: scale = $scale",
|
|
FATAL);
|
|
if (!is_array($vect)) {
|
|
trigger_error("Incorrect input vector, array of values expected", ERROR);
|
|
return null;
|
|
}
|
|
for ($i=0; $i<count($vect); $i++) {
|
|
if (!is_numeric($vect[$i]))
|
|
trigger_error("Value at position $i is not a number, using 0 (zero)",
|
|
WARNING);
|
|
$temp[$i] = log($scale) * $vect[$i];
|
|
}
|
|
return $temp;
|
|
}
|
|
|
|
// configura il gestore dell'errore definito dall'utente
|
|
$old_error_handler = set_error_handler("myErrorHandler");
|
|
|
|
// attiva alcuni errori, definendo prima un array misto con elementi non numerici
|
|
echo "vector a\n";
|
|
$a = array(2,3,"foo",5.5,43.3,21.11);
|
|
print_r($a);
|
|
|
|
// genera il secondo array, generando un avviso
|
|
echo "----\nvector b - a warning (b = log(PI) * a)\n";
|
|
$b = scale_by_log($a, M_PI);
|
|
print_r($b);
|
|
|
|
// questo è il problema, passiamo una stringa al posto di un array
|
|
echo "----\nvector c - an error\n";
|
|
$c = scale_by_log("not array",2.3);
|
|
var_dump($c);
|
|
|
|
// errore critico, il log di zero o di un numero negativo non è definito
|
|
echo "----\nvector d - fatal error\n";
|
|
$d = scale_by_log($a, -2.5);
|
|
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
E l'esecuzione di questo script, darà
|
|
<informalexample>
|
|
<programlisting>
|
|
<![CDATA[
|
|
vector a
|
|
Array
|
|
(
|
|
[0] => 2
|
|
[1] => 3
|
|
[2] => foo
|
|
[3] => 5.5
|
|
[4] => 43.3
|
|
[5] => 21.11
|
|
)
|
|
----
|
|
vector b - a warning (b = log(PI) * a)
|
|
<b>WARNING</b> [1024] Value at position 2 is not a number, using 0 (zero)<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] Incorrect input vector, array of values expected<br>
|
|
NULL
|
|
----
|
|
vector d - fatal error
|
|
<b>FATAL</b> [256] log(x) for x <= 0 is undefined, you used: scale = -2.5<br>
|
|
Fatal error in line 36 of file trigger_error.php, PHP 4.0.2 (Linux)<br>
|
|
Aborting...<br>
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
</para>
|
|
<para>
|
|
E' importante ricordare che il gestore degli errori standard di PHP viene
|
|
completamente saltato. La configurazione di <function>error_reporting</function> non avrà effetto
|
|
e il vostro gestore di errore sarà richiamato senza considerarla - in ogni
|
|
caso sarà possibile leggere il valore corrente di <function>error_reporting</function>
|
|
ed agire di conseguenza. E' di particolare rilevanza il fatto che questo
|
|
valore sarà 0 se la riga che causa l'errore viene precedura dall'
|
|
<link linkend="language.operators.errorcontrol">operatore di controllo errore @</link>.
|
|
</para>
|
|
<para>
|
|
Notare anche che è vostra responsabilità definire <function>die</function>
|
|
se necessario. Se la funzione di gestione dell'errore ritorna, lo script
|
|
continerà l'esecuzione con la riga seguente a quella che ha causato
|
|
l'errore.
|
|
</para>
|
|
<para>
|
|
Vedere anche <function>error_reporting</function>,
|
|
<function>restore_error_handler</function>,
|
|
<function>trigger_error</function>, <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
|
|
-->
|