File: errorfunc.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 (572 lines) | stat: -rw-r--r-- 19,842 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
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
<?xml version="1.0" encoding="iso-8859-2"?>
<!-- $Revision: 1.1 $ -->
 <reference id="ref.errorfunc">
  <title>Erori - gestiune i nregistrare</title>
  <titleabbrev>Erorile i nregistrarea</titleabbrev>

  <partintro>
   <para>
    Aceste funcii se ocup cu tratarea i nregistrarea erorilor. Ele permit definirea
	propriilor reguli pentru tratarea erorilor, precum i modificarea modului n care
	erorile pot fi nregistrate. Vei putea adapta i mbunti modul n care erorile sunt
	raportate i nregistrate, pentru satisfacerea propriilor nevoi.
   </para>
   <para> 
    Cu funciile de nregistrare putei trimite mesaje la alte maini, la o adresa de email
	(sau la un sistem email pe pager!), la sisteme jurnal etc. n acest fel, putei
	nregistra i monitoriza cele mai importante pri ale aplicaiilor i ale paginilor web.
   </para>
   <para> 
    Funciile pentru raportarea erorilor v permit personalizarea nivelului i a tipului de
	erori raportate, plecnd de la simple notificri i pn la funcii personalizate.
   </para>
  </partintro>

  <refentry id="function.error-log">
   <refnamediv>
    <refname>error_log</refname>
    <refpurpose>Trimite un mesaj de eroare ctre o destinaie</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descriere</title>
     <methodsynopsis>
      <type>int</type><methodname>error_log</methodname>
      <methodparam><type>string</type><parameter>message</parameter></methodparam>
      <methodparam choice="opt"><type>int</type><parameter>message_type</parameter></methodparam>
      <methodparam choice="opt"><type>string</type><parameter>destination</parameter></methodparam>
      <methodparam choice="opt"><type>string</type><parameter>extra_headers</parameter></methodparam>
     </methodsynopsis>
    <para>
     Trimite un mesaj de eroare ctre jurnalul de erori al serverului web, ctre un port
     <acronym>TCP</acronym> sau ctre un fiier. Primul parametru,
     <parameter>message</parameter>, este mesajul de eroare care trebuie nregistrat.
	 Cel de-al doilea parametru, <parameter>message_type</parameter>, spune unde trebuie
	 s fie trimis mesajul:
     <table>
      <title>Tipuri de nregistrri <function>error_log</function></title>
      <tgroup cols="2">
       <tbody>
    <row>
     <entry>0</entry>
     <entry>
      <parameter>message</parameter> este trimis la sistemul de nregistrare al PHP, folosind
	  mecanismul de nregistrare al sistemului de operare sau un fiier, n funcie de cum este
	  setat directiva de configurare <link linkend="ini.error-log">error_log</link>.
     </entry>
    </row>
    <row>
     <entry>1</entry>
     <entry>
      <parameter>message</parameter> va fi trimis ctre adresa de email setat de ctre parametrul
	  <parameter>destination</parameter>. Acesta este singurul tip de nregistrare unde este
	  folosit cel de-al patrulea parametru, <parameter>extra_headers</parameter>. Acest tip de
	  mesaj folosete aceeai funcie intern ca i <function>mail</function>.
     </entry>
    </row>
    <row>
     <entry>2</entry>
     <entry>
      <parameter>message</parameter> este trimis ctre conexiunea de depanare PHP. Aceast
	  opiune este disponibil doar dac directiva
	  <link linkend="install.configure.enable-debugger">remote_debugging</link> a fost activat.
	  n acest caz, parametrul <parameter>destination</parameter> specific numele gazdei sau
	  adresa IP, opional numrul portului, pentru socket-ul de recepionare al informaiilor
	  de depanare.
     </entry>
    </row>
    <row>
     <entry>3</entry>
     <entry>
      <parameter>message</parameter>  este adugat la fiierul
      <parameter>destination</parameter>.
     </entry>
    </row>
       </tbody>
      </tgroup>
     </table>
    </para>
    <warning>
     <para>
      Depanarea distant via TCP/IP este o facilitate disponibil n PHP 3 i
	  <emphasis>nu</emphasis> este disponibil n PHP 4.
     </para>
    </warning>
    <para>
     <example role="php">
      <title>Exemple <function>error_log</function></title>
      <programlisting role="php">
<![CDATA[
// se trimite o notificare prin serverul de nregistrare
// dac nu se poate conecta la baza de date
if (!Ora_Logon ($username, $password)) {
    error_log ("Baza de date Oracle nu este disponibila!", 0);
}

// notific administratorul prin email
if (!($foo = allocate_new_foo()) {
    error_log ("A aprut o problema, nu s-a alocat memorie pentru FOO!", 1,
               "operator@domeniul-tau.ro");
}

// alte modaliti de apelare error_log():
error_log ("Ai dat-o-n bar!", 2, "127.0.0.1:7000");
error_log ("Ai dat-o-n bar!", 2, "loghost");
error_log ("Ai dat-o-n bar!", 3, "/var/tmp/my-errors.log");
]]>
      </programlisting>
     </example>
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.error-reporting">
   <refnamediv>
    <refname>error_reporting</refname>
    <refpurpose>Seteaz care erori PHP sunt raportate</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descriere</title>
     <methodsynopsis>
      <type>int</type><methodname>error_reporting</methodname>
      <methodparam choice="opt"><type>int</type><parameter>level</parameter></methodparam>
     </methodsynopsis>
    <para>
     Seteaz nivelul de raportare a erorilor PHP i returneaz nivelul anterior. Nivelul de
	 raportare poate fi o masc de bii sau numele unei constante. Folosirea numelor de
	 constante este ncurajat n mod deosebit pentru a asigura compatibilitatea cu versiunile
	 urmtoare. Pe msur ce au fost adugate nivele de eroare, rangul numerelor ntregi a
	 crescut, aa c vechile nivele de eroare bazate pe valori ntregi nu vor avea totdeauna
	 comportamentul ateptat.
    </para>
    <para>
     <example role="php">
      <title>Schimbri ale valorilor ntregi</title>
      <programlisting role="php">
<![CDATA[
error_reporting (55);   // echivalent n PHP 3 cu E_ALL ^ E_NOTICE

/* ...n PHP 4, '55' va nsemna (E_ERROR | E_WARNING | E_PARSE |
E_CORE_ERROR | E_CORE_WARNING) */

error_reporting (2039); // echivalent n PHP 4 cu E_ALL ^ E_NOTICE

error_reporting (E_ALL ^ E_NOTICE); // Identic n PHP 3 i 4
]]>
      </programlisting>
     </example>
     Urmai legturile constantelor pentru a afla ce reprezint:
     <table>
      <title>Valori bit pentru <function>error_reporting</function></title>
      <tgroup cols="2">
       <thead>
        <row>
         <entry>valoare</entry>
         <entry>constant</entry>
        </row>
       </thead>
       <tbody>
        <row>
         <entry>1</entry>
         <entry>
          <link linkend="internal.e-error">E_ERROR</link>
         </entry>
        </row>
        <row>
         <entry>2</entry>
         <entry>
          <link linkend="internal.e-warning">E_WARNING</link>
         </entry>
        </row>
        <row>
         <entry>4</entry>
         <entry>
          <link linkend="internal.e-parse">E_PARSE</link>
         </entry>
        </row>
        <row>
         <entry>8</entry>
         <entry>
          <link linkend="internal.e-notice">E_NOTICE</link>
         </entry>
        </row>
        <row>
         <entry>16</entry>
         <entry>
          <link linkend="internal.e-core-error">E_CORE_ERROR</link>
         </entry>
        </row>
        <row>
         <entry>32</entry>
         <entry>
          <link linkend="internal.e-core-warning">E_CORE_WARNING</link>
         </entry>
        </row>
        <row>
         <entry>64</entry>
         <entry>
          <link linkend="internal.e-compile-error">E_COMPILE_ERROR</link>
         </entry>
        </row>
        <row>
         <entry>128</entry>
         <entry>
          <link linkend="internal.e-compile-warning">E_COMPILE_WARNING</link>
         </entry>
        </row>
        <row>
         <entry>256</entry>
         <entry>
          <link linkend="internal.e-user-error">E_USER_ERROR</link>
         </entry>
        </row>
        <row>
         <entry>512</entry>
         <entry>
          <link linkend="internal.e-user-warning">E_USER_WARNING</link>
         </entry>
        </row>
        <row>
         <entry>1024</entry>
         <entry>
          <link linkend="internal.e-user-error">E_USER_NOTICE</link>
         </entry>
        </row>
       </tbody>
      </tgroup>
     </table>
    </para>
    <para>
     <example role="php">
      <title>Exemple <function>error_reporting</function></title>
      <programlisting role="php">
<![CDATA[
error_reporting(0);
/* Oprete orice raportare */

/* Exemplele sunt prezentate mai nti n sintaxa veche (pentru PHP 2/3)
 * apoi n sintaxa nou (cea recomandat, pentru PHP 3/4)
 */

error_reporting (7);
error_reporting (E_ERROR | E_WARNING | E_PARSE);
/* bine de folosit pentru erori simple de rulare */

error_reporting  (15);
error_reporting (E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
/* bine de folosit pentru raportarea variabilelor neiniializate (posibil scrise greit) */

error_reporting (63);
error_reporting (E_ALL);
/* raporteaz toate erorile PHP */
]]>
      </programlisting>
     </example>
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.restore-error-handler">
   <refnamediv>
    <refname>restore_error_handler</refname>
    <refpurpose>
     Restaureaz funcia anterioar de tratare a erorilor
    </refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descriere</title>
     <methodsynopsis>
      <type>void</type><methodname>restore_error_handler</methodname>
      <void/>
     </methodsynopsis>
    <para>
     Se folosete dup schimbarea funciei de tratare a erorilor prin apelarea funciei
     <function>set_error_handler</function>, pentru a reveni la funcia anterioar de tratare a erorilor (care poate fi nativ sau definit de utilizator).
    </para>
    <para>
     Mai consultai <function>error_reporting</function>,
     <function>set_error_handler</function>,
     <function>trigger_error</function>, <function>user_error</function>
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.set-error-handler">
   <refnamediv>
    <refname>set_error_handler</refname>
    <refpurpose>
     Seteaz o funcie de tratare a erorilor definit de utilizator
    </refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descriere</title>
     <methodsynopsis>
      <type>string</type><methodname>set_error_handler</methodname>
      <methodparam><type>string</type><parameter>error_handler</parameter></methodparam>
     </methodsynopsis>
    <para>
     Seteaz o funcie utilizator (<parameter>error_handler</parameter>) pentru gestionarea
     erorilor ntr-un script. Returneaz funcia anterioar de gestiune (dac exist),
	 sau &false; n cazul unei erori. Aceast funcie v permite definirea propriului mod
	 de tratare a erorilor la execuie, de exemplu n aplicaii n care
	 este nevoie de refacerea unor date/fiiere cnd apare o eroare critic,
     sau este necesar declanarea unei erori dac sunt ndeplinite anumite condiii
	 (folosind <function>trigger_error</function>).
    </para>
    <para>
	 Funcia definit de utilizator trebuie s accepte doi parametri: codul de eroare
	 i un ir de caractere care descrie eroarea. ncepnd cu versiunea PHP 4.0.2 sunt
	 acceptai nc trei parametri opionali: numele fiierului n care a aprut eroarea,
	 numrul liniei la care s-a produs aceast eroare i contextul n care ea a aprut
	 (un tablou care indic tabela de simboluri activ n punctul n care a aprut eroarea).
    </para>
    <para>
	 Mai jos este exemplificat tratarea unei excepii interne prin declanarea erorilor
	 i tratarea lor cu o funcie definit de utilizator:
    </para>
    <para>
     <example>
      <title>
       Tratarea erorilor cu ajutorul funciilor <function>set_error_handler</function> i
       <function>trigger_error</function>
      </title>
      <programlisting role="php">
<![CDATA[
<?php

// redefinirea constantelor de eroare - doar n PHP 4
define ('FATAL',   E_USER_ERROR);
define ('ERROR',   E_USER_WARNING);
define ('WARNING', E_USER_NOTICE);

// setarea nivelului de raportare a erorilor pentru acest script
error_reporting (FATAL | ERROR | WARNING);

// funcia de tratare a erorilor
function myErrorHandler ($errlevel, $errstr, $errfile, $errline) {
  switch ($errlevel) {
  case FATAL:
    echo "<b>FATAL</b> [$errlevel] $errstr<br>\n";
    echo "  Eroare fatala la linia ".$errline." in fisierul ".$errfile;
    echo ", PHP ".PHP_VERSION." (".PHP_OS.")<br>\n";
    echo "Abandon...<br>\n";
    exit(1);
    break;
  case ERROR:
    echo "<b>ERROR</b> [$errlevel] $errstr<br>\n";
    break;
  case WARNING:
    echo "<b>WARNING</b> [$errlevel] $errstr<br>\n";
    break;
    default:
    echo "Eroare de tip necunoscut: [$errlevel] $errstr<br>\n";
    break;
  }
}

// funcie pentru testarea tratrii erorilor
function scale_by_log ($vect, $scale) {
  if (!is_numeric($scale) || $scale <= 0)
    trigger_error("log(x) pentru x <= 0 nu este definita, ati folosit: scale = $scale",
      FATAL);
  if (!is_array($vect)) {
    trigger_error("Tablou de intrare incorect, trebuia un tablou de valori", ERROR);
    return null;
  }
  for ($i = 0; $i < count($vect); $i++) {
    if (!is_numeric($vect[$i]))
      trigger_error("Valoarea de la pozitia $i nu este un numar, se va folosi 0 (zero)", 
        WARNING);
    $temp[$i] = log($scale) * $vect[$i];
  }
  return $temp;
}

// setarea gestionarului de erori definit de utilizator
$old_error_handler = set_error_handler("myErrorHandler");

// se definete un tablou cu un element non-numeric
// i se declaneaz eroare
echo "tablou a<pre>\n";
$a = array(2, 3, "foo", 5.5, 43.3, 21.11);
print_r($a);
echo "</pre>";

// se genereaz al doilea tablou i se declaneaz o avertizare
echo "----<br>\ntablou b - o atentionare (b = log(PI) * a)\n<pre>";
$b = scale_by_log($a, M_PI);
print_r($b);
echo "</pre>";

// se transmite un ir de caractere n loc de un tablou
echo "----<br>\ntablou c - eroare\n<pre>";
$c = scale_by_log("nu este tablou", 2.3);
var_dump($c);
echo "</pre>\n";

// o eroare critica: nu este definit log() pentru zero sau numere negative
echo "----<br>\ntablou d - eroare fatala\n";
$d = scale_by_log($a, -2.5);

?>
]]>
      </programlisting>
     </example>
     Rularea script-ului va produce:
     <informalexample>
      <programlisting>
<![CDATA[
tablou a
Array
(
    [0] => 2
    [1] => 3
    [2] => foo
    [3] => 5.5
    [4] => 43.3
    [5] => 21.11
)

----
tablou b - o atentionare (b = log(PI) * a) 
WARNING [1024] Valoarea de la pozitia 2 nu este un numar, se va folosi 0 (zero)
Array
(
    [0] => 2.2894597716988
    [1] => 3.4341896575482
    [2] => 0
    [3] => 6.2960143721717
    [4] => 49.566804057279
    [5] => 24.165247890281
)

----
tablou c - eroare 
ERROR [512] Tablou de intrare incorect, trebuia un tablou de valori
NULL

----
tablou d - eroare fatala FATAL [256] log(x) pentru x <= 0 nu este definita, ati folosit: scale = -2.5
Eroare fatala la linia 37 in fisierul /softure/htdocs/test.php, PHP 4.0.6 (Linux)
Abandon...
1
]]>
      </programlisting>
     </informalexample>
    </para>
    <para>
     Este important de reinut c gestionarul standard PHP al erorilor va fi ignorat
	 complet. Setrile efectuate de <function>error_reporting</function> nu vor mai avea
	 nici un efect i va fi apelat doar funcia definit de utilizator. Se poate citi n
	 continuare valoarea curent setat de <function>error_reporting</function> pentru folosire
	 adecvat. Trebuie fcut meniunea c aceast valoare va fi zero dac instruciunea
	 care a generat eroarea este precedat de
	 <link linkend="language.operators.errorcontrol">operatorul @</link> de control a erorilor.
    </para>
    <para>
     De asemenea, trebuie precizat c este responsabilitatea programatorului s apeleze funcia
	 <function>die</function> dac este necesar. Dac funcia de tratare a erorii nu ntrerupe
	 explicit execuia, scriptul va continua cu instruciunea urmtoare celei care a generat eroarea.
    </para>
    <para>
     Mai consultai <function>error_reporting</function>,
     <function>restore_error_handler</function>,
     <function>trigger_error</function>, <function>user_error</function>.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.trigger-error">
   <refnamediv>
    <refname>trigger_error</refname>
    <refpurpose>
     Genereaz o eroare/avertisment/notificare la nivelul utilizatorului
    </refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descriere</title>
     <methodsynopsis>
      <type>void</type><methodname>trigger_error</methodname>
      <methodparam><type>string</type><parameter>error_msg</parameter></methodparam>
      <methodparam choice="opt"><type>int</type><parameter>error_type</parameter></methodparam>
     </methodsynopsis>
    <para>
     Se folosete pentru a declana o eroare condiionat de utilizator. Se poate folosi
	 n conjuncie cu gestionarul nativ al erorilor sau cu o funcie definit de utilizator
	 (<function>set_error_handler</function>). Funcioneaz doar cu familia de constante
     E_USER, valoarea implicit pentru <parameter>error_type</parameter> fiind <constant>E_USER_NOTICE</constant>.
    </para>
    <para>
	  Aceast funcie este util atunci cnd se dorete generarea unui rspuns anume
	  pentru o excepie aprut n timpul rulrii. De exemplu:
     <informalexample>
      <programlisting>
<![CDATA[
if (assert ($divisor == 0))
   trigger_error ("mprirea la zero nu este permis", E_USER_ERROR);
]]>
      </programlisting>
     </informalexample>
     <note>
     <para>
     Consultai <function>set_error_handler</function> pentru un exemplu mai detaliat.
     </para>
     </note>
    </para>
    <para>
     Mai consultai <function>error_reporting</function>,
     <function>set_error_handler</function>,
     <function>restore_error_handler</function>, 
     <function>user_error</function>.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.user-error">
   <refnamediv>
    <refname>user_error</refname>
    <refpurpose>
     Genereaz o eroare/avertisment/notificare la nivelul utilizatorului
    </refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descriere</title>
     <methodsynopsis>
      <type>void</type><methodname>user_error</methodname>
      <methodparam><type>string</type><parameter>error_msg</parameter></methodparam>
      <methodparam choice="opt"><type>int</type><parameter>error_type</parameter></methodparam>
     </methodsynopsis>
    <para>
     Acesta este un alias pentru funcia <function>trigger_error</function>.
    </para>
    <para>
     Mai consultai <function>error_reporting</function>,
     <function>set_error_handler</function>,
     <function>restore_error_handler</function>,
     <function>trigger_error</function>.
    </para>
   </refsect1>
  </refentry>

 </reference>

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