ALLE foutmeldigingen naar error file
Code (php)
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
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
<?php
/*----------------------------------------------------------------------------*/
function wrtlog($lvl,$msg,$pgm='',$lnx='',$vrb='')
{
$tblerr = array(E_ERROR => 'Fatal error',
E_WARNING => 'Warning',
E_PARSE => 'Parsing Error',
E_NOTICE => 'Notice',
E_CORE_ERROR => 'Core Error',
E_CORE_WARNING => 'Core Warning',
E_COMPILE_ERROR => 'Compile Error',
E_COMPILE_WARNING => 'Compile Warning',
E_USER_ERROR => 'User Error',
E_USER_WARNING => 'User Warning',
E_USER_NOTICE => 'User Notice');
$rcd = '<p>' . '<strong>' . $tblerr[$lvl] . '</strong>: ' . $msg;
if($pgm != '')
$rcd .= ' in <strong>' . $pgm . '</strong>';
if($lnx != '')
$rcd .= ' on line <strong>' . $lnx . '</strong>';
$rcd .= '</p>';
error_log($rcd,3,'err.txt');
return;
}
/*----------------------------------------------------------------------------*/
error_reporting(E_ALL);
ini_set('display_errors','off');
set_error_handler('wrtlog');
echo 'Stap 1:';
wrtlog(E_USER_ERROR,'Eigen foutmeldiging.',__FILE__,__LINE__-1);
echo 'Stap 2:';
Onbekend();
echo 'Stap 3:';
$xxx = $aaa;
?>
/*----------------------------------------------------------------------------*/
function wrtlog($lvl,$msg,$pgm='',$lnx='',$vrb='')
{
$tblerr = array(E_ERROR => 'Fatal error',
E_WARNING => 'Warning',
E_PARSE => 'Parsing Error',
E_NOTICE => 'Notice',
E_CORE_ERROR => 'Core Error',
E_CORE_WARNING => 'Core Warning',
E_COMPILE_ERROR => 'Compile Error',
E_COMPILE_WARNING => 'Compile Warning',
E_USER_ERROR => 'User Error',
E_USER_WARNING => 'User Warning',
E_USER_NOTICE => 'User Notice');
$rcd = '<p>' . '<strong>' . $tblerr[$lvl] . '</strong>: ' . $msg;
if($pgm != '')
$rcd .= ' in <strong>' . $pgm . '</strong>';
if($lnx != '')
$rcd .= ' on line <strong>' . $lnx . '</strong>';
$rcd .= '</p>';
error_log($rcd,3,'err.txt');
return;
}
/*----------------------------------------------------------------------------*/
error_reporting(E_ALL);
ini_set('display_errors','off');
set_error_handler('wrtlog');
echo 'Stap 1:';
wrtlog(E_USER_ERROR,'Eigen foutmeldiging.',__FILE__,__LINE__-1);
echo 'Stap 2:';
Onbekend();
echo 'Stap 3:';
$xxx = $aaa;
?>
De output op mijn browser ziet er dan uit als volgt:
Stap 1:Stap 2:
De output op mijn error file 'err.txt' ziet er dan uit als volgt:
<p><strong>User Error</strong>: Eigen foutmeldiging. in <strong>D:\...\test.php</strong> on line <strong>29</strong></p>
Maar ... ik zie nergens de foutmeldiging door PHP systeem zelf. Alleen als ik de waarde 'display_errors' aanzet, wordt het wel te zien op mijn browser als volgt:
Stap 1:Stap 2:
Fatal error: Call to undefined function Onbekend() in D:\...\test.php on line 32
Wie kan mij ermee helpen?
Quote:
De output op mijn error file 'err.txt' ziet er dan uit als volgt:
<p><strong>User Error</strong>: Eigen foutmeldiging. in <strong>D:\...\test.php</strong> on line <strong>29</strong></p>
<p><strong>User Error</strong>: Eigen foutmeldiging. in <strong>D:\...\test.php</strong> on line <strong>29</strong></p>
Klopt, die schrijf je zelf naar je errorlog op regel 30 van je voorbeeld.
Kijk op php.net voor een voorbeeld van een eigen errorhandler.
Fatal error: Call to undefined function Onbekend() in D:\...\test.php on line 32
misschien moet je nog harder praten en nog meer hoofdletters, dan kunnen we het beter begrijpen
Gewijzigd op 01/01/1970 01:00:00 door M Ypma
Regel 30 werkt perfect, want die foutmeldiging komt goed in mijn error file 'err.txt'.
Regel 32 stuurt helaas geen foutmeldiging naar mijn error file. En indien ik in de regel 27 van 'off' naar 'on' verander, komt die foutmeldiging slechts alleen op mijn browser. Het ziet er dan uit als volgt:
Fatal error: Call to undefined function Onbekend() in D:\...\test.php on line 32
Nu vraag ik me af, HOE ik alle INTERNAL PHP foutmeldigingen op mijn error file kan krijgen. Het is heel belangrijk, want ik wil immers GEEN foutmeldigingen op een browser, maar alleen op mijn error file, zodat alle onkundige gebruikers er geen last van krijgen. Vandaar.
Laat mij gerust weten, wat en waar jullie niet begrijpen.
Code (php)
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
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
<?php
class Error_Handler
{
var $m_sErrorMessage;
var $m_iErrorNumber;
var $m_iErrorLine;
var $m_sErrorFile;
var $m_sErrorContext;
function Error_Handler()
{
set_error_handler( array( &$this, 'Error_Handeling' ) );
register_shutdown_function( array( &$this, '__destructor' ) );
}
function Error_Handeling($p_iErrorType, $p_sErrorMsg, $p_sErrorFile, $p_iErrorLine, $p_sErrorContext)
{
$this->m_iErrorNumber = $p_iErrorType;
$this->m_iErrorline = $p_iErrorLine;
$this->m_sErrorFile = $p_sErrorFile;
switch( $p_iErrorType )
{
case E_ERROR: $this->m_sErrorMessage = 'Error'; break;
case E_WARNING: $this->m_sErrorMessage = 'Warning'; break;
case E_PARSE: $this->m_sErrorMessage = 'Parsing Error'; break;
case E_NOTICE: $this->m_sErrorMessage = 'Notice'; break;
case E_CORE_ERROR: $this->m_sErrorMessage = 'Core Error'; break;
case E_CORE_WARNING: $this->m_sErrorMessage = 'Core Warning'; break;
case E_COMPILE_ERROR: $this->m_sErrorMessage = 'Compile Error'; break;
case E_COMPILE_WARNING: $this->m_sErrorMessage = 'Compile Warning'; break;
case E_USER_ERROR: $this->m_sErrorMessage = 'User Error'; break;
case E_USER_WARNING: $this->m_sErrorMessage = 'User Warning'; break;
case E_USER_NOTICE: $this->m_sErrorMessage = 'User Notice'; break;
case E_STRICT: $this->m_sErrorMessage = 'Runtime Notice'; break;
case E_RECOVERABLE_ERROR: $this->m_sErrorMessage = 'Catchable Fatal Error'; break;
}
if (($p_iErrorType)>0)
{
echo '<hr><br />Msg: '.$this->m_sErrorMessage;
echo ' Nr: '.$this->m_iErrorNumber;
echo ' Line: '.$this->m_iErrorline.'<hr><br />';
// echo ' File: '.$this->m_sErrorFile
}
}
function __destructor()
{
}
}
?>
class Error_Handler
{
var $m_sErrorMessage;
var $m_iErrorNumber;
var $m_iErrorLine;
var $m_sErrorFile;
var $m_sErrorContext;
function Error_Handler()
{
set_error_handler( array( &$this, 'Error_Handeling' ) );
register_shutdown_function( array( &$this, '__destructor' ) );
}
function Error_Handeling($p_iErrorType, $p_sErrorMsg, $p_sErrorFile, $p_iErrorLine, $p_sErrorContext)
{
$this->m_iErrorNumber = $p_iErrorType;
$this->m_iErrorline = $p_iErrorLine;
$this->m_sErrorFile = $p_sErrorFile;
switch( $p_iErrorType )
{
case E_ERROR: $this->m_sErrorMessage = 'Error'; break;
case E_WARNING: $this->m_sErrorMessage = 'Warning'; break;
case E_PARSE: $this->m_sErrorMessage = 'Parsing Error'; break;
case E_NOTICE: $this->m_sErrorMessage = 'Notice'; break;
case E_CORE_ERROR: $this->m_sErrorMessage = 'Core Error'; break;
case E_CORE_WARNING: $this->m_sErrorMessage = 'Core Warning'; break;
case E_COMPILE_ERROR: $this->m_sErrorMessage = 'Compile Error'; break;
case E_COMPILE_WARNING: $this->m_sErrorMessage = 'Compile Warning'; break;
case E_USER_ERROR: $this->m_sErrorMessage = 'User Error'; break;
case E_USER_WARNING: $this->m_sErrorMessage = 'User Warning'; break;
case E_USER_NOTICE: $this->m_sErrorMessage = 'User Notice'; break;
case E_STRICT: $this->m_sErrorMessage = 'Runtime Notice'; break;
case E_RECOVERABLE_ERROR: $this->m_sErrorMessage = 'Catchable Fatal Error'; break;
}
if (($p_iErrorType)>0)
{
echo '<hr><br />Msg: '.$this->m_sErrorMessage;
echo ' Nr: '.$this->m_iErrorNumber;
echo ' Line: '.$this->m_iErrorline.'<hr><br />';
// echo ' File: '.$this->m_sErrorFile
}
}
function __destructor()
{
}
}
?>
Misschien heb je er wat aan.
Bij een Fatal error wordt het PHP script beëindigd dus je errorhandler functie wordt nooit meer aangeroepen. Fatal errors kunnen dus bij mijn weten niet gelogd worden.
Maar is dit niet een hele oude koe?
niet als je een 'newbie' bent, dan zijn alle oude koeien vers :-)
Ronald van Aalten schreef op 24.12.2007 20:41:
Ik doelde op het topic, niet op jouw opmerking hoor. Dat is namelijk iets waarbij lang niet iedereen stilstaat :)niet als je een 'newbie' bent, dan zijn alle oude koeien vers :-)