File: error-handling.xml

package info (click to toggle)
phpdoc 20020310-1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 35,272 kB
  • ctags: 354
  • sloc: xml: 799,767; php: 1,395; cpp: 500; makefile: 200; sh: 140; awk: 51
file content (317 lines) | stat: -rw-r--r-- 10,103 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
<?xml version="1.0" encoding="iso-8859-2"?>
<!-- EN-Revision: 1.24 Maintainer: goba Status: ready -->

<chapter id="features.error-handling">
 <title>Hibakezels</title>

 <para>
  A hibknak s figyelmeztetseknek PHP-ben
  szmos tpusa van. Ezek:
  <table>
   <title>PHP hiba tpusok</title>
   <tgroup cols="4">
    <thead>
     <row>
      <entry>rtk</entry>
      <entry>Szimblum</entry>
      <entry>Lers</entry>
      <entry>Megjegyzs</entry>
     </row>
    </thead>
    <tbody>
     <row>
      <entry>1</entry>
      <entry>E_ERROR</entry>
      <entry>fatlis futs-idej hibk</entry>
      <entry></entry>
     </row>
     <row>
      <entry>2</entry>
      <entry>E_WARNING</entry>
      <entry>nem fatlis futs-idej hibk</entry>
      <entry></entry>
     </row>
     <row>
      <entry>4</entry>
      <entry>E_PARSE</entry>
      <entry>fordts-idej feldolgozsi hibk</entry>
      <entry></entry>
     </row>
     <row>
      <entry>8</entry>
      <entry>E_NOTICE</entry>
      <entry>futs-idej figyelmeztetsek (a notice a warning-nl gyengbb)</entry>
      <entry></entry>
     </row>
     <row>
      <entry>16</entry>
      <entry>E_CORE_ERROR</entry>
      <entry>fatlis hibk, amik a PHP elindulsakor lpnek fel</entry>
      <entry>csak a PHP 4-ben</entry>
     </row>
     <row>
      <entry>32</entry>
      <entry>E_CORE_WARNING</entry>
      <entry>nem fatlis hibk figyelmeztetsei (warning), amik a PHP elindulsakor lpnek fel</entry>
      <entry>csak a PHP 4-ben</entry>
     </row>
     <row>
      <entry>64</entry>
      <entry>E_COMPILE_ERROR</entry>
      <entry>fatlis fordts-idej hibk</entry>
      <entry>csak a PHP 4-ben</entry>
     </row>
     <row>
      <entry>128</entry>
      <entry>E_COMPILE_WARNING</entry>
      <entry>nem fatlis fordts-idej figyelmeztetsek (warning)</entry>
      <entry>csak a PHP 4-ben</entry>
     </row>
     <row>
      <entry>256</entry>
      <entry>E_USER_ERROR</entry>
      <entry>felhasznl ltal generlt hibazenetek</entry>
      <entry>csak a PHP 4-ben</entry>
     </row>
     <row>
      <entry>512</entry>
      <entry>E_USER_WARNING</entry>
      <entry>felhasznl ltal generlt figyelmeztetsek (warning)</entry>
      <entry>csak a PHP 4-ben</entry>
     </row>
     <row>
      <entry>1024</entry>
      <entry>E_USER_NOTICE</entry>
      <entry>felhasznl ltal generlt figyelmeztetsek (notice)</entry>
      <entry>csak a PHP 4-ben</entry>
     </row>
     <row>
      <entry></entry>
      <entry>E_ALL</entry>
      <entry>az sszes fent felsorolt elem</entry>
      <entry>csak a PHP 4-ben</entry>
     </row>
    </tbody>
   </tgroup>
  </table>
 </para>
   
 <para>
  A fenti rtkek (akr a numerikusak, akr a szimbolikusak) arra hasznlhatak,
  hogy felpts egy bitmask-ot, ami megadja, hogy mely hibkat kell jeleznie
  a PHP-nek. Hasznlhatod <link linkend="language.operators.bitwise">bitszint
  opertorokat</link>, hogy sszelltsd a fenti elemekbl a neked megfelel
  rtket, vagy letilts egyes hibkat. Csak a '|', '~', '!', s '&amp;'
  opertorok hasznlhatak <filename>php.ini</filename> fjlban, s
  semmilyen opertor sem hasznlhat  a  <filename>php3.ini</filename>
  fjlban.
 </para>

 <para>
  PHP 4-ben az alapbellts <link
  linkend="ini.error-reporting">error_reporting</link> rtk
  <literal>E_ALL &amp; ~E_NOTICE</literal>, ami azt jelenti, hogy minden
  hiba s figyelmeztets megjelenik az E_NOTICE-szint kivtelvel. PHP 3-ban
  az alapbellts <literal>(E_ERROR | E_WARNING | E_PARSE)</literal>,
  ugyanezt jelenti. Vedd figyelembe, hogy ezek a konstansok nem
  tmogatottak a PHP 3 <filename>php3.ini</filename> fjljban,
  ezrt az <link linkend="ini.error-reporting">error_reporting</link>
  bellts a numerikus <literal>7</literal> rtk.
 </para>

 <para>
  Ezek a belltsok az ini fjl <link
  linkend="ini.error-reporting">error_reporting</link> direktvjval
  vltoztathatak meg, vagy az Apache <filename>httpd.conf</filename>
  fjlban a php_error_reporting (php3_error_reporting PHP 3 esetn)
  direktvval vagy vgl futsidben egy szkriptben az
  <function>error_reporting</function> fggvnnyel.
 </para>

 <warning>
  <para>
   Ha a kdod vagy a szervered frissted PHP 3-rl PHP 4-re, jl teszed,
   ha ellenrzd ezeket a belltsokat s az
   <function>error_reporting</function> fggvnyhvsokat, klnben
   akaratlanul kikapcsolod az j hibatpusokat, klnsen az
   E_COMPILE_ERROR-t. Ez res dokumentumokhoz vezethet, amik
   nem tartalmaznak semmilyen utalst arra, hogy mi trtnt,
   vagy hogy hol kellene keresni a problmt...
  </para>
 </warning>

 <para>
  Minden <link linkend="language.expressions">PHP kifejezs</link> rhat a
  &quot;@&quot; eltaggal, ami kikapcsolja a hibajelentst arra a kifejezsre.
  Ha hiba lp fel a kifejezs kirtkelsekor, s a 
  <link linkend="ini.track-errors">track_errors</link> szolgltats
  be van kapcsolva, a hibazenet megtallhat a 
  <literal>$php_errormsg</literal> globlis vltozban.
 </para>

 <note>
  <para>
   A <link linkend="language.operators.errorcontrol">@
   hibakezel opertor</link> nem kapcsolja ki a
   szkriptek feldolgozsa sorn elfordul hibk
   (parse error) jelentst.
  </para>
 </note>

 <warning>
  <para>
   Jelenleg a "@" hibakezel opertor kikapcsolja azon kritikus hibk
   jelentst is, amik meglltjk a szkript futst. Ms problmk
   mellett, ha egy fggvnybl rkez hibazenetek elnyelsre
   hasznlod a "@" jelet, meg fog llni a szkript futsa, ha
   nem ltezik a megadott fggvny, vagy elrtad a nevt.
  </para>
 </warning>

 <para>
  Az albbiakban lthatsz egy pldt a PHP hibakezel kpessgeire.
  Definilunk egy hibakezel fggvnyt, ami trolja a hibkat egy
  fjlba (XML formtummal) s email-t kld a fejlesztnek ha
  a programban kritikus hiba trtnik.
  <example>
   <title>Hibakezels hasznlata egy szkriptben</title>
   <programlisting role="php">
<![CDATA[
<?php
// sajt hibakezelst ptnk
error_reporting(0);

// felhasznl ltal definilt hibakezel fggvny
function sajatHibaKezelo ($hibaszam, $hibauzenet, $filenev, $sorszam, $valtozok) {

    // idblyeg a hibhoz
    $ido = date("Y-m-d H:i:s (T)");

    // Asszociatv tmb definilsa a hibaszvegeknek.
    // Valjban csak a 2,8,256,512 s 1024 elemeket
    // vesszk figyelembe
    $hibatipus = 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"
                );

    // azok a hibatpusok, amikre a vltozkat is el kell menteni
    $user_hibak = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE);
    
    $hiba = "<errorentry>\n";
    $hiba .= "\t<datetime>".$ido."</datetime>\n";
    $hiba .= "\t<errornum>".$hibaszam."</errornum>\n";
    $hiba .= "\t<errortype>".$hibatipus[$hibaszam]."</errortype>\n";
    $hiba .= "\t<errormsg>".$hibauzenet."</errormsg>\n";
    $hiba .= "\t<scriptname>".$filenev."</scriptname>\n";
    $hiba .= "\t<scriptlinenum>".$sorszam."</scriptlinenum>\n";

    if (in_array($hibaszam, $user_hibak))
        $hiba .= "\t<vartrace>".wddx_serialize_value($valtozok,"Variables")."</vartrace>\n";
    $hiba .= "</errorentry>\n\n";
    
    // tesztelshez
    // echo $hiba;

    // a hibanapl elmentse, email klds ha kritikus hiba van
    error_log($hiba, 3, "/usr/local/php4/error.log");
    if ($hibaszam == E_USER_ERROR)
        mail("phpdev@mydomain.com","Kritikus User Hiba",$hiba);
}


function tavolsag ($vektor1, $vektor2) {
    if (!is_array($vektor1) || !is_array($vektor2)) {
        trigger_error("Helytelen parameterek, tomboket varok", E_USER_ERROR);
        return NULL;
    }

    if (count($vektor1) != count($vektor2)) {
        trigger_error("A vektorok ugyanolyan dimenziojuak legyenek", E_USER_ERROR);
        return NULL;
    }

    for ($i=0; $i<count($vektor1); $i++) {
        $c1 = $vektor1[$i]; $c2 = $vektor2[$i];
        $d = 0.0;
        if (!is_numeric($c1)) {
            trigger_error("Az elso vektor $i koordinataja nem szam, nullaval szamolok", 
                            E_USER_WARNING);
            $c1 = 0.0;
        }
        if (!is_numeric($c2)) {
            trigger_error("A masodik vektor $i koordinataja nem szam, nullaval szamolok", 
                            E_USER_WARNING);
            $c2 = 0.0;
        }
        $d += $c2*$c2 - $c1*$c1;
    }
    return sqrt($d);
}

$regi_hiba_kezelo = set_error_handler("sajatHibaKezelo");

// nem definilt konstans, warning-ot generl
$t = NEM_VAGYOK_DEFINIALVA;

// nhny "vektor" definilsa
$a = array (2,3, "ize");
$b = array (5.5, 4.3, -1.6);
$c = array (1, -3);

// user hiba generlsa
$t1 = tavolsag($c, $b)."\n";

// jabb user hiba generlsa
$t2 = tavolsag($b, "ez nem tmb")."\n";

// warning generlsa
$t3 = tavolsag($a, $b)."\n";
?>
]]>
    </programlisting>
   </example>
   Ez csak egy egyszer plda, ami bemutatja, hogy hogyan kell hasznlni a
   <link linkend="ref.errorfunc">Hibakezel s naplz fggvnyeket</link>.
  </para>

  <para>
   Lsd mg: <function>error_reporting</function>,
   <function>error_log</function>,
   <function>set_error_handler</function>,
   <function>restore_error_handler</function>, 
   <function>trigger_error</function>, s
   <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:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->