[PHP] Geen fouten zichtbaar in browser, veel in log

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • jlrensen
  • Registratie: Oktober 2000
  • Laatst online: 00:04

jlrensen

plaatjes vullen geen gaatjes

Topicstarter
Hallo allen,

ik ben een beginnende PHP-er, maar met behulp van www.php.net kom ik er meestal aardig uit. Nu heb ik echter een probleem waar ik niet uit kom.
Voor een forum waar ik lid van ben, houdt ik wat statistieken bij van een spelletje. Met behulp van de lijst met alle highscores (een plain-text bestand) bereken ik aantallen, gemiddelden enz, en die post ik dan hier.

Gisteren ging de server waarop ik die stats draai echter down, en dat kwam volgens de eigenaar van de server hierdoor:
je php scripts genereerde foutmeldingen:
use of undefined constant aant
use of undefined constant score
use of undefined constant naam

hierdoor liep de error-log snel vol en toen die 2 Gig in beslag nam crashte de boel.
kan je je scripts aanpassen zodat die foutmeldingen verdwijnen? voor het genenereren van de worldtop kreeg ik 75Kb aan foutmeldingen
Ik krijg alleen dus geen foutmeldingen bij het uitvoeren van de scripts, en zie dus niet in wat er fout is, er komt gewoon uit wat eruit moet duren, het duurt alleen even (>30 sec) Dat is echter niet zo erg aangezien het script maar eens in de 2 a 3 dagen wordt gedraait.

Hieronder staat de code van het script (de genoemde "worldtop"). Wie kan me helpen??

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
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
<?php

////De Berekeningen:
//Lees het bestand in:
$arr_regels = file ('high.dat');

//Maar een array aan met alle highscores:
$kl=0;
$wr=0;
for($i=0; $i<(count($arr_regels)); $i+=2)
{
    if ($arr_regels[$i] == "-1\r\n")
    { $kl=1; }

    if ($kl==0)
    {
        $arr_ALL[$wr][naam] = $arr_regels[$i];
        $arr_ALL[$wr][score] = $arr_regels[$i+1];
        $wr++;
    }
}

//bereken het aantal voorkomens wereldwijd
$m = 0;
for($i=1; $i<(count($arr_ALL)); $i++)
{
    if(in_arr_jor($arr_voorkw, $arr_ALL[$i][naam]) == 0)
    {
        $arr_voorkw[$m][naam] = $arr_ALL[$i][naam];
        $arr_voorkw[$m][aant] = 1;
        $m++;
    }
    else
    {
        $arr_voorkw[geef_index($arr_voorkw, $arr_ALL[$i][naam])][aant]++;
    }
}

$arr_voorkw = bubble($arr_voorkw);

//// Weergeven:
//De top-10 van voorkomend wereldwijd
echo '<A NAME="voorkww">';
echo '[SIZE=4]Top 20 aantal voorkomens wereldwijd[/SIZE]<BR><BR>';
echo "[code]";
echo '<PRE>';
echo " R Naam              #\n";
for($i=0; $i<20; $i++)
{
    if ($i < 9) 
    { 
        echo spaties(1);
    }
    echo ($i+1);
    echo spaties(1);
    echo substr($arr_voorkw[$i][naam], 0, (strlen($arr_voorkw[$i][naam])-2));
    echo spaties(18 - strlen($arr_voorkw[$i][naam]));
    if ($arr_voorkw[$i][aant] < 100)
    {
        echo spaties(1);
    }
    if ($arr_voorkw[$i][aant] < 10)
    {
        echo spaties(1);
    }
    echo $arr_voorkw[$i][aant];
    echo "\n";
} 
echo '</PRE>';
echo "<BR>[/code]";

//// Hulpfuncties:

//print x spaties
function spaties($a)
{
    for($i=0; $i<$a; $i++)
    {
        $u = $u . " ";
    }
    return $u;
}

//Het bubble-sorten van de 2D-array, op [aant]
function bubble($arr)
{
    for($i=0; $i<(count($arr)); $i++)
    {
        for($j=0; $j<((count($arr))-$i); $j++)
        {
            if($arr[$j][aant] < $arr[($j + 1)][aant])
            {
                $temp = $arr[$j];
                $arr[$j] = $arr[($j+1)];
                $arr[($j+1)] = $temp;
            }
        }
    }
    return $arr;
}


//De index bij een naam zoeken
function geef_index($arr, $naam)
{
    for ($i=0;$i<(count($arr));$i++)
    {
        if(dedubbel($arr[$i][naam]) == dedubbel($naam))
        {
            return $i;
        }
    }
}

//Checker: komt de naam voor in de array
function in_arr_jor($arr, $naam)
{
    $inarr = 0;
    for($k=0; $k<(count($arr)); $k++)
    {
        if(dedubbel($arr[$k][naam]) == dedubbel($naam))
        {
            $inarr = 1;
        }
    }
    return $inarr;
}

//Maak namen universeel, om dubbelingen te voorkomen
//hoe: verwijder spaties, streepjes (-) en maak alles upper
//ook voor rina ` verwijderen, voor schoen !
function dedubbel($naam)
{
    return str_replace(array("`", "-", " ", "!"),
    array("", "", "", ""),strtoupper($naam));
    //regel afgebroken om layout te sparen.
}

//Test of een string in een andere string voorkomt
function instring($test, $sub)
{
    for($p=0; $p<(strlen($test)-3); $p++)
    {
        if (substr($test, $p, 4) == $sub)
        {
            return TRUE;
        }
    }
}

?>

Men moet het denken bijbrengen, niet wat al gedacht is. ~C. Gurlitt


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

display_errors op On zetten in je PHP.ini, en evt. error_reporting hoger, mocht dat nodig zijn...

om erachter te komen of die settings al goed staan: phpinfo () gebruiken

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • nikao
  • Registratie: November 1999
  • Laatst online: 10-02-2022
anders zet je gewoon die variabelen even voordat je ze gebruikt.. gewoon ff $naam="'; ofzo..
dan krijg je die errors ook niet en voila.. opgelost..

Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

inderdaad, gewoon netjes je variabelen initialiseren:
PHP:
1
2
3
4
$my_integer = 0;
$my_string = "";
$my_array = Array();
//--- etc


en ook isset() is je vriend! :)

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

  • Osiris
  • Registratie: Januari 2000
  • Niet online
Een '@' ervoor zetten kan ook :) Dan meld ie de error die eventueel het dingetje erna geeft niet... Of ie nog wel in de logs voorkomt weet ik niet...

Acties:
  • 0 Henk 'm!

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 02-09 11:02

D2k

Osiris schreef op 18 december 2002 @ 16:38:
Een '@' ervoor zetten kan ook :) Dan meld ie de error die eventueel het dingetje erna geeft niet... Of ie nog wel in de logs voorkomt weet ik niet...

:r @ oplossing

dat dus nooooooooooooooooooooooooooooooooooooooooooooit

Doet iets met Cloud (MS/IBM)


Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

Osiris schreef op 18 december 2002 @ 16:38:
Een '@' ervoor zetten kan ook :) Dan meld ie de error die eventueel het dingetje erna geeft niet... Of ie nog wel in de logs voorkomt weet ik niet...
Over het algemeen kun je beter geen '@' gebruiken, het is een vieze manier om programmeerfouten te verbergen (er zijn natuurlijk uitzonderingen).

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

  • Osiris
  • Registratie: Januari 2000
  • Niet online
D2k schreef op 18 December 2002 @ 16:41:

[...]

:r @ oplossing

dat dus nooooooooooooooooooooooooooooooooooooooooooooit
thomaske schreef op 18 December 2002 @ 16:41:
[...]


Over het algemeen kun je beter geen '@' gebruiken, het is een vieze manier om programmeerfouten te verbergen (er zijn natuurlijk uitzonderingen).
:? :? :? :+

Die gebruik ik nog wel es voor $_GET["Blaat"] enzo :P

Ik prog dan ook ranzig, I admit :X

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Je grootste probleem zijn trouwens je array keys.
PHP:
1
2
3
4
//niet zo
$arr[$i][aant]=$blaat;
//maar zo
$arr[$i]['aant']=$blaat;

Trouwens, dat fouten niet zichtbaar in de browser zijn, betekend nog niet dat ze er niet zijn :)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 02-09 11:02

D2k

Osiris schreef op 18 december 2002 @ 16:43:
[...]


[...]

:? :? :? :+

Die gebruik ik nog wel es voor $_GET["Blaat"] enzo :P

Ik prog dan ook ranzig, I admit :X

schroef je error reporting rapido omhoog en ga al je code maar cleanen (en kijk voor de grap eens in je errorlog)

Doet iets met Cloud (MS/IBM)


Acties:
  • 0 Henk 'm!

  • Osiris
  • Registratie: Januari 2000
  • Niet online
D2k schreef op 18 december 2002 @ 16:49:

[...]

schroef je error reporting rapido omhoog en ga al je code maar cleanen (en kijk voor de grap eens in je errorlog)
Afbeeldingslocatie: http://www.theforumisdown.com/uploadfiles/1102/access.gif

Afbeeldingslocatie: http://www.theforumisdown.com/uploadfiles/1102/errorlog.gif

Verhouding bijna 1 op 1 :X :P Is that a good thing??? :?

Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

Janoz schreef op 18 December 2002 @ 16:48:
Je grootste probleem zijn trouwens je array keys.
PHP:
1
2
3
4
//niet zo
$arr[$i][aant]=$blaat;
//maar zo
$arr[$i]['aant']=$blaat;

Trouwens, dat fouten niet zichtbaar in de browser zijn, betekend nog niet dat ze er niet zijn :)
Inderdaad :)

en het liefste ook nog zo:
PHP:
1
2
3
4
if (!isset($arr[$i])) {
  $arr[$i] = Array();
}
$arr[$i]['aant']=$blaat;

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

  • Grum
  • Registratie: Juni 2001
  • Niet online
thomaske schreef op 18 December 2002 @ 16:54:
[...]
Inderdaad :)

en het liefste ook nog zo:
PHP:
1
2
3
4
if (!isset($arr[$i])) {
  $arr[$i] = Array();
}
$arr[$i]['aant']=$blaat;
En dat is niet nodig :P

Assignments vereisen geen 'pre-check'.

Wat je wel kan/moet doen is $i checken en natuurlijk of $arr wel een array is.

:P

Acties:
  • 0 Henk 'm!

  • jlrensen
  • Registratie: Oktober 2000
  • Laatst online: 00:04

jlrensen

plaatjes vullen geen gaatjes

Topicstarter
drm schreef op 18 December 2002 @ 16:18:
display_errors op On zetten in je PHP.ini, en evt. error_reporting hoger, mocht dat nodig zijn...

om erachter te komen of die settings al goed staan: phpinfo () gebruiken
Het staat niet op mijn server, dus PHP.ini aanpassen gaat niet.

Ik heb wel

error_reporting ( E_ALL );

togevoegd, maar zag nog steeds geen fouten.


Terwijl ik de link uit je sig aan het doorlezen was over

$string = $array [ 'index' ]

in plaats van

$string = $array [ index ]

werd dat ook al enkele keren gepost. Ik heb het veranderd, en het is nu ongeveer 2 maal zo snel, hopelijk doordat hij minder naar de error-log hoefde te schrijven

Ook heb ik maar even m'n variabelen gedeclareerd.

Ik mail de eigenaar van de server weleven of dit het probleem oplost

In ieder geval iedereen bedankt voor de snelle hulp.

Men moet het denken bijbrengen, niet wat al gedacht is. ~C. Gurlitt


Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

Grum schreef op 18 December 2002 @ 17:05:
[...]


En dat is niet nodig :P

Assignments vereisen geen 'pre-check'.

Wat je wel kan/moet doen is $i checken en natuurlijk of $arr wel een array is.

:P
oops.. in de war met JavaScript..

offtopic:
Grummie! werk je nog bij pdns/trilab?

[ Voor 4% gewijzigd door thomaske op 18-12-2002 17:13 ]

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."

Pagina: 1