ALLE foutmeldigingen naar error file

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jan de Vrije

Jan de Vrije

15/05/2007 21:24:00
Quote Anchor link
Mijn onderstaande programmaatje doet helaas niet helemaal correct. Ik wil namelijk OOK PHP foutmeldigingen in mijn error file hebben. Hoe kan ik het doen?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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;
?>


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?
 
PHP hulp

PHP hulp

15/05/2024 17:02:17
 
Jan Koehoorn

Jan Koehoorn

15/05/2007 21:32:00
Quote Anchor link
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>

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.
 
Jan de Vrije

Jan de Vrije

15/05/2007 21:51:00
Quote Anchor link
Ja, maar... HOE kan ik de volgende foutmeldiging OOK in mijn error file krijgen, want het werkt NIET via de errorhandler:
Fatal error: Call to undefined function Onbekend() in D:\...\test.php on line 32
 
M Ypma

M Ypma

15/05/2007 22:00:00
Quote Anchor link
@Jan,
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
 
Jan de Vrije

Jan de Vrije

15/05/2007 22:38:00
Quote Anchor link
Goed, ik probeer nog wat duidelijker te doen:

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.
 
Danny Roelofs

Danny Roelofs

16/05/2007 02:10:00
Quote Anchor link
Ik ben ooit al eens begonnen met een Class en het is nog maar een beginsel maar het is nog heel kaal maar het werkt zover ik me kan herinneren.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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()
    {



    }
}

?>


Misschien heb je er wat aan.
 
Ron

Ron

24/12/2007 20:19:00
Quote Anchor link
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.
 
Joren de Wit

Joren de Wit

24/12/2007 20:26:00
Quote Anchor link
Een fatal error treedt, net als een parse error, al op voordat de set_error_handler() functie aangeroepen wordt, daar heb je gelijk in...

Maar is dit niet een hele oude koe?
 
Ron

Ron

24/12/2007 20:41:00
Quote Anchor link
niet als je een 'newbie' bent, dan zijn alle oude koeien vers :-)
 
Joren de Wit

Joren de Wit

24/12/2007 20:51:00
Quote Anchor link
Ronald van Aalten schreef op 24.12.2007 20:41:
niet als je een 'newbie' bent, dan zijn alle oude koeien vers :-)
Ik doelde op het topic, niet op jouw opmerking hoor. Dat is namelijk iets waarbij lang niet iedereen stilstaat :)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.