luk             Tue Feb 26 12:57:16 2002 EDT

  Added files:                 
    /phpdoc/cs/features error-handling.xml 
  Log:
  
  
  

Index: phpdoc/cs/features/error-handling.xml
+++ phpdoc/cs/features/error-handling.xml
<?xml version="1.0" encoding="iso-8859-2"?>

 <chapter id="features.error-handling">
  <title>Zpracov�n� chyb</title>
 
  <para>
   V PHP existuje n�kolik druh� chyb a varov�n�. Jsou to:   

   <table>
    <title>Druhy chyb v PHP</title>
    <tgroup cols="4">
     <thead>
      <row>
       <entry>Hodnota</entry>
       <entry>Konstanta</entry>
       <entry>Popis</entry>
       <entry>Pozn�mka</entry>
      </row>
     </thead>
     <tbody>
      <row>
       <entry>1</entry>
       <entry>E_ERROR</entry>
       <entry>v�znamn� (fat�ln�) runtimov� chyby</entry>
       <entry></entry>
      </row>
      <row>
       <entry>2</entry>
       <entry>E_WARNING</entry>
       <entry>runtimov� varov�n� (nev�znamn� chyby)</entry>
       <entry></entry>
      </row>
      <row>
       <entry>4</entry>
       <entry>E_PARSE</entry>
       <entry>kompila�n� syntaktick� chyby</entry>
       <entry></entry>
      </row>
      <row>
       <entry>8</entry>
       <entry>E_NOTICE  </entry>
       <entry>
        runtimov� zpr�vy (m�n� v�n� ne� varov�n�)
       </entry>
       <entry></entry>
      </row>
      <row>
       <entry>16</entry>
       <entry>E_CORE_ERROR</entry>
       <entry>fat�ln� chyby, kter� se vyskytly b�hem startu PHP</entry>
       <entry>pouze PHP 4</entry>
      </row>
      <row>
       <entry>32</entry>
       <entry>E_CORE_WARNING</entry>
       <entry>varov�n� b�hem startu PHP</entry> 
       <entry>pouze PHP 4</entry>
      </row>
      <row>
       <entry>64</entry>
       <entry>E_COMPILE_ERROR</entry>
       <entry>fat�ln� kompila�n� chyby</entry>
       <entry>pouze PHP 4</entry>
      </row>
      <row>
       <entry>128</entry>
       <entry>E_COMPILE_WARNING</entry>
       <entry>kompila�n� varov�n� (nev�znamn� chyby)</entry>
       <entry>PHP 4 only</entry>
      </row>
      <row>
       <entry>256</entry>
       <entry>E_USER_ERROR</entry>
       <entry>u�ivatelsky generovan� chybov� zpr�vy</entry>
       <entry>PHP 4 only</entry>
      </row>
      <row>
       <entry>512</entry>
       <entry>E_USER_WARNING</entry>
       <entry>u�ivatelsky generovan� varov�n�</entry>
       <entry>PHP 4 only</entry>
      </row>
      <row>
       <entry>1024</entry>
       <entry>E_USER_NOTICE </entry>
       <entry>u�ivatelsky generovan� informativn� zpr�vy</entry>
       <entry>PHP 4 only</entry>
      </row>
      <row>
       <entry></entry>
       <entry>E_ALL</entry>
       <entry>v�echny z uveden�ch, kter� jsou danou verz� PHP podporov�ny</entry>
       <entry></entry>
      </row>
     </tbody>
    </tgroup>
   </table>
  </para>

  <para>
   V��e uveden� hodnoty (a� ji� ��seln� nebo symbolick�) se pou��vaj�
   pro sestaven� bitov� masky, kter� specifikuje, kter� chyby se maj�
   oznamovat. M��ete pou��vat
   <link linkend="language.operators.bitwise">bitov� logick� oper�tory</link>
   pro kombinaci hodnot nebo maskov�n� ur�it�ch druh� chyb. Uv�domte si,
   �e v souboru <filename>php.ini</filename> budou spr�vn� interpretov�ny
   pouze oper�tory '|', '~', '!', a '&amp;', a �e v
   <filename>php3.ini</filename> nelze pou��t ��dn� z t�chto oper�tor�. 
  </para>
  <para>
   V PHP 4 je jako implicitn� hodnota pro <link
   linkend="ini.error-reporting">error_reporting</link> nastaveno
   <literal>E_ALL &amp; ~E_NOTICE</literal>, tzn. hl�en� v�ech chyb
   a varov�n�, kter� nejsou na �rovni E_NOTICE. V PHP 3 je implicitn�
   <literal>(E_ERROR | E_WARNING | E_PARSE)</literal>, co� znamen�
   tot�. Uv�domte si, �e  v souboru <filename>php3.ini</filename>
   nelze pou��vat konstanty, a proto nastaven�
   <link linkend="ini.error-reporting">error_reporting</link> mus� b�t
   numerick�; tedy nap��klad <literal>7</literal>.
  </para>

  <para>
   Inici�ln� nastaven� m��e b�t v ini souboru zm�n�no direktivou
   <link linkend="ini.error-reporting">error_reporting</link>,
   v serveru Apache v souboru <filename>httpd.conf</filename> direktivou   
   php_error_reporting (php3_error_reporting v PHP 3), a kone�n� m��e b�t
   t� nastaveno skriptem za pou�it� funkce
   <function>error_reporting</function>.
  </para>
  
  <warning>
   <para>
    Pokud upgradujete k�d nebo server z PHP 3 na PHP 4, m�li byste ov��it
    tato nastaven� a vol�n� <function>error_reporting</function> anebo
    potla�it hl�en� nov�ch typ� chyb, zvl�t� E_COMPILE_ERROR. To
    m��e v�st k vypr�zdn�n� obsahu dokument� bez jak�koli informace o tom,
    co se stalo a kde hledat probl�m.    
   </para>
  </warning>
    
  <para>
   V�echny <link linkend="language.expressions">PHP v�razy</link> mohou
   b�t tak� vol�ny s prefixem "@", kter� vyp�n� hl�en� chyb pro tento
   jedin� v�raz. Pokud b�hem prov�d�n� v�razu nastane chyba a volba 
   <link linkend="ini.track-errors">track_errors</link> je zapnut�, najdete
   chybovou zpr�vu v glob�ln� prom�nn� <literal>$php_errormsg</literal>.
  </para>

  <note>
   <para>
    <link linkend="language.operators.errorcontrol">Prefixov�m oper�torem
    ��zen� chyb @</link> nelze potla�it chybov� hl�en� o syntaktick�ch
    chyb�ch.
   </para>
  </note>

  <warning>
   <para>
    V sou�asnosti <link linkend="language.operators.errorcontrol">prefixov�
    oper�tor ��zen� chyb</link> v p��pad� kritick�ch chyb (kter� ukon��
    prov�d�n� skriptu) pouze potla�� chybov� hl�en�. Jin�mi slovy,
    pokud pou�ijete <link linkend="language.operators.errorcontrol">@</link>
    k potla�en� chyb z jist� funkce, kter� nen� dostupn� nebo byla chybn�
    zaps�na, skript zde skon��, ani� by indikoval pro�.    
   </para>
  </warning>

  <para>
   N�e uveden� p��klad ukazuje pou�it� schopnost� zpracov�n� chyb v PHP.
   Definujeme funkci zpracov�n� chyb, kter� zaznamen�v� informace do souboru
   (v XML form�tu) a v p��pad� kritick� chyby ode�le e-mailovou zpr�vu
   v�voj��i.   
   <example>
    <title>Pou�it� zpracov�n� chyb ve skriptu</title>
    <programlisting role="php">
<![CDATA[
<?php
// ud�l�me si vlastn� zpacov�n� chyb
error_reporting(0);

// u�ivatelsky definovan� funkce pro zpracov�n� chyb
function userErrorHandler ($errno, $errmsg, $filename, $linenum, $vars) {
    // �asov� raz�tko polo�ky
    $dt = date("Y-m-d H:i:s (T)");

    // definuje asociativn� pole pro chybov� �et�zec
    // ve skute�nosti mohou polo�ky obsahovat pouze
    // hodnoty 2,8,256,512 a 1024
    $errortype = array (
                1   =>  "Error",
                2   =>  "Warning",
                4   =>  "Parsing Error",
                8   =>  "Notice",
                16  =>  "Core Error",
                32  =>  "Core Warning",
                64  =>  "Compile Error",
                128 =>  "Compile Warning",
                256 =>  "User Error",
                512 =>  "User Warning",
                1024=>  "User Notice"
                );
    // mno�ina chyb, pro kter� bude ulo�en v�pis prom�nn�ch
    $user_errors = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE);
    
    $err = "<errorentry>\n";
    $err .= "\t<datetime>".$dt."</datetime>\n";
    $err .= "\t<errornum>".$errno."</errornum>\n";
    $err .= "\t<errortype>".$errortype[$errno]."</errortype>\n";
    $err .= "\t<errormsg>".$errmsg."</errormsg>\n";
    $err .= "\t<scriptname>".$filename."</scriptname>\n";
    $err .= "\t<scriptlinenum>".$linenum."</scriptlinenum>\n";

    if (in_array($errno, $user_errors))
        $err .= "\t<vartrace>".wddx_serialize_value($vars,"Variables")."</vartrace>\n";
    $err .= "</errorentry>\n\n";
    
    // pro testov�n�
    // echo $err;

    // ulo� do chybov�ho protokolu a po�li mi zpr�vu (pokud je to kritick� chyba)
    error_log($err, 3, "/usr/local/php4/error.log");
    if ($errno == E_USER_ERROR)
        mail("[EMAIL PROTECTED]","Critical User Error",$err);
}


function distance ($vect1, $vect2) {
    if (!is_array($vect1) || !is_array($vect2)) {
        trigger_error("Incorrect parameters, arrays expected", E_USER_ERROR);
        return NULL;
    }

    if (count($vect1) != count($vect2)) {
        trigger_error("Vectors need to be of the same size", E_USER_ERROR);
        return NULL;
    }

    for ($i=0; $i<count($vect1); $i++) {
        $c1 = $vect1[$i]; $c2 = $vect2[$i];
        $d = 0.0;
        if (!is_numeric($c1)) {
            trigger_error("Coordinate $i in vector 1 is not a number, using zero", 
                            E_USER_WARNING);
            $c1 = 0.0;
        }
        if (!is_numeric($c2)) {
            trigger_error("Coordinate $i in vector 2 is not a number, using zero", 
                            E_USER_WARNING);
            $c2 = 0.0;
        }
        $d += $c2*$c2 - $c1*$c1;
    }
    return sqrt($d);
}

$old_error_handler = set_error_handler("userErrorHandler");

// nedefinovan� konstanta, generuje varov�n�
$t = I_AM_NOT_DEFINED;

// definuje n�jak� "vektory"
$a = array(2,3,"foo");
$b = array(5.5, 4.3, -1.6);
$c = array (1,-3);

// generuje u�ivatelskou chybu
$t1 = distance($c,$b)."\n";

// generuje jinou u�ivatelskou chybu
$t2 = distance($b,"i am not an array")."\n";

// generuje hl�en�
$t3 = distance($a,$b)."\n";

?>
]]>
    </programlisting>
   </example>
   Toto je pouze jednoduch� p��klad, kter� ukazuje, jak pou��vat    
   <link linkend="ref.errorfunc">Funkce pro zpracov�n� a z�znam chyb</link>.
  </para>

  <para>
   Viz tak� <function>error_reporting</function>,
   <function>error_log</function>,
   <function>set_error_handler</function>,
   <function>restore_error_handler</function>, 
   <function>trigger_error</function>,
   <function>user_error</function>
  </para>

 </chapter>


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

Reply via email to