Added entities pointing to errorfunc.xml in manual.xml.in and en/chapters.ent

Added user errors to the list of errors and an example in
en/features/error-handling.xml


git-svn-id: https://svn.php.net/repository/phpdoc/en/trunk@32183 c90b9560-bf6c-de11-be94-00142212c4b1
This commit is contained in:
Jesus M. Castagnetto 2000-09-07 13:26:05 +00:00
parent 61d5264048
commit 4656d5f8f6
2 changed files with 123 additions and 5 deletions

View file

@ -45,6 +45,7 @@
<!ENTITY reference.dir SYSTEM "functions/dir.xml">
<!-- ENTITY reference.dl SYSTEM "functions/dl.xml" -->
<!ENTITY reference.domxml SYSTEM "functions/domxml.xml">
<!ENTITY reference.errorfunc SYSTEM "functions/errorfunc.xml">
<!ENTITY reference.exec SYSTEM "functions/exec.xml">
<!ENTITY reference.fdf SYSTEM "functions/fdf.xml">
<!ENTITY reference.filepro SYSTEM "functions/filepro.xml">

View file

@ -36,7 +36,7 @@
</row>
<row>
<entry>8</entry>
<entry>E_NOTICE </entry>
<entry>E_NOTICE </entry>
<entry>
run-time notices (less serious than warnings)
</entry>
@ -52,8 +52,8 @@
<entry>32</entry>
<entry>E_CORE_WARNING</entry>
<entry>
warnings (non fatal errors) that occur during PHP's initial
startup
warnings (non fatal errors) that occur during PHP's initial
startup
</entry>
<entry>PHP 4 only</entry>
</row>
@ -83,7 +83,7 @@
</row>
<row>
<entry>1024</entry>
<entry>E_USER_NOTICE </entry>
<entry>E_USER_NOTICE </entry>
<entry>user-generated notice message</entry>
<entry>PHP 4 only</entry>
</row>
@ -138,7 +138,7 @@
or where to look for the problem.
</para>
</warning>
<para>
All <link linkend="language.expressions">PHP expressions</link> can
also be called with the "@" prefix, which turns off error reporting
@ -162,8 +162,125 @@
</para>
</warning>
<para>
Below we can see an example of using the error handling capabilities in
PHP. We define a error handling function which logs the information into
a file (using an XML format), and e-mails the developer in case a critical
error in the logic happens.
<example>
<title>Using error handling in a script</title>
<programlisting role="php">
&lt;?php
// we will do our own error handling
error_reporting(0);
// user defined error handling function
function userErrorHandler ($errno, $errmsg, $filename, $linenum, $vars) {
// timestamp for the error entry
$dt = date(&quot;Y-m-d H:i:s (T)&quot;);
// define an assoc array of error string
// in reality the only entries we should
// consider are 2,8,256,512 and 1024
$errortype = array (
1 =&gt; &quot;Error&quot;,
2 =&gt; &quot;Warning&quot;,
4 =&gt; &quot;Parsing Error&quot;,
8 =&gt; &quot;Notice&quot;,
16 =&gt; &quot;Core Error&quot;,
32 =&gt; &quot;Core Warning&quot;,
64 =&gt; &quot;Compile Error&quot;,
128 =&gt; &quot;Compile Warning&quot;,
256 =&gt; &quot;User Error&quot;,
512 =&gt; &quot;User Warning&quot;,
1024=&gt; &quot;User Notice&quot;
);
// set of errors for which a var trace will be saved
$user_errors = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE);
$err = &quot;&lt;errorentry&gt;\n&quot;;
$err .= &quot;\t&lt;datetime&gt;&quot;.$dt.&quot;&lt;/datetime&gt;\n&quot;;
$err .= &quot;\t&lt;errornum&gt;&quot;.$errno.&quot;&lt;/errnumber&gt;\n&quot;;
$err .= &quot;\t&lt;errortype&gt;&quot;.$errortype[$errno].&quot;&lt;/errortype&gt;\n&quot;;
$err .= &quot;\t&lt;errormsg&gt;&quot;.$errmsg.&quot;&lt;/errormsg&gt;\n&quot;;
$err .= &quot;\t&lt;scriptname&gt;&quot;.$filename.&quot;&lt;/scriptname&gt;\n&quot;;
$err .= &quot;\t&lt;scriptlinenum&gt;&quot;.$linenum.&quot;&lt;/scriptlinenum&gt;\n&quot;;
if (in_array($errno, $user_errors))
$err .= &quot;\t&lt;vartrace&gt;&quot;.wddx_serialize_value($vars,&quot;Variables&quot;).&quot;&lt;/vartrace&gt;\n&quot;;
$err .= &quot;&lt;/errorentry&gt;\n\n&quot;;
// for testing
echo $err;
// save to the error log, and e-mail me if there is a critical user error
/*
error_log($err, 3, &quot;/usr/local/php4/error.log&quot;);
if ($errno == E_USER_ERROR)
mail(&quot;phpdev@mydomain.com&quot;,&quot;Critical User Error&quot;,$err);
*/
}
function distance ($vect1, $vect2) {
if (!is_array($vect1) || !is_array($vect2)) {
trigger_error(&quot;Incorrect parameters, arrays expected&quot;, E_USER_ERROR);
return NULL;
}
if (count($vect1) != count($vect2)) {
trigger_error(&quot;Vectors need to be of the same size&quot;, E_USER_ERROR);
return NULL;
}
for ($i=0; $i&lt;count($vect1); $i++) {
$c1 = $vect1[$i]; $c2 = $vect2[$i];
$d = 0.0;
if (!is_numeric($c1)) {
trigger_error(&quot;Coordinate $i in vector 1 is not a number, using zero&quot;,
E_USER_WARNING);
$c1 = 0.0;
}
if (!is_numeric($c2)) {
trigger_error(&quot;Coordinate $i in vector 2 is not a number, using zero&quot;,
E_USER_WARNING);
$c2 = 0.0;
}
$d += $c2*$c2 - $c1*$c1;
}
return sqrt($d);
}
$old_error_handler = set_error_handler(&quot;userErrorHandler&quot;);
// undefined constant, generates a warning
$t = I_AM_NOT_DEFINED;
// define some &quot;vectors&quot;
$a = array(2,3,&quot;foo&quot;);
$b = array(5.5, 4.3, -1.6);
$c = array (1,-3);
// generate a user error
$t1 = distance($c,$b).&quot;\n&quot;;
// generate another user error
$t2 = distance($b,&quot;i am not an array&quot;).&quot;\n&quot;;
// generate a warning
$t3 = distance($a,$b).&quot;\n&quot;;
?&gt;
</programlisting>
</example>
This is just a simple example showing how to use the
<link linkend="ref.errorfunc">Error Handling and Logging
functions</link>.
</para>
<para>
See also <function>error_reporting</function>,
<function>error_log</function>,
<function>set_error_handler</function>,
<function>restore_error_handler</function>,
<function>trigger_error</function>,