[php] string update gaat fout

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • nzyme
  • Registratie: November 2001
  • Laatst online: 29-07 15:47
Goed, ik ben (nog steeds) bezig met mn traffic webpage. Het updaten van mn string wil echter maar niet lukken. Ik probeer het nu zo:
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
<?PHP
$mtime_data = microtime();
$mtime_data = explode(" ",$mtime_data);
$mtime_data = $mtime_data[1] + $mtime_data[0];
$mtimestart_data = $mtime_data;
$filename = "./trafdata.txt";

$table = file_get_contents($filename);
$data = explode('#', $table);
for ( $i = 1; $i <=count($data); $i++ ){
list($ip[], $total[], $received[], $send[], $tcp[], $udp[], 
$icmp[], $http[], $ftp[], $p2p[]) = explode('/', $data[$i]);
}

$table_current = "#Total/500.0/500.0/700.0/600.0/0/0/0/0/0
#192.168.168.11/100.0/200.0/300.0/400.0/0/0/0/0/0
#192.168.168.15/400.0/300.0/350.0/450.0/0/0/0/0/0
#192.168.168.251/300.0/350.0/150.0/100.0/0/0/0/0/0";
$data_current = explode('#', $table_current);
for ( $i = 1; $i <=count($data_current); $i++ )
{
list($ip_current[], $total_current[], $received_current[], 
$send_current[], $tcp_current[], $udp_current[], $icmp_current[], 
$http_current[], $ftp_current[], $p2p_current[]) = explode('/', $data_current[$i]);
}


for ( $i = 0; $i <=count($data_current); $i++ ) {
    if ($ip_current[$i] == $ip[$i]) {
        $ip_new[] = $ip_current[$i];
        if ($total_current[$i] >= $total[$i]) {
            $total_new[] = ($total[$i] + $total_current[$i]);}
            else $total_new[] = $total_current[$i];
        if ($received_current[$i] >= $received[$i]) {
            $received_new[] = ($received[$i] + $received_current[$i]);}
            else $received_new[] = $received_current[$i];
        if ($send_current[$i] >= $send[$i]) {
            $send_new[] = ($send[$i] + $send_current[$i]);}
            else $send_new[] = $send_current[$i];
    }
}
print"<P>";

for ( $i = 0; $i <=count($data_current); $i++ ){
$table_new = "#$ip_new[$i]/$total_new[$i]/$received_new[$i]/$send_new[$i]";
print"$table_new<br>";
$table_new = $table_current;
$file = fopen($filename, 'w+b');
fputs($file, $table_new);
}
fclose($file);


$mtime_data = microtime();
$mtime_data = explode(" ",$mtime_data);
$mtime_data = $mtime_data[1] + $mtime_data[0];
$mtimeend_data = $mtime_data;
$totaltime_data = ($mtimeend_data - $mtimestart_data);

echo "<p>";
print round($totaltime_data,5);

?>

geeft:
code:
1
2
3
4
5
6
7
8
9
#Total/1000/1000/1400
#192.168.168.11/200/400/600
#192.168.168.15/800/600/700
#192.168.168.251/600/700/300
#/0/0/0
#/0/0/0


0.01573

Die laatste 2 lijnen slaan dus nergens op, die nullen .
verander ik 500 naar 600 dan krijg ik als output: eerst een 1100 en dan 1200 en daar blijft ie ook op.

Het gaat er dus om dat de dynamische $table_new en $table_current met elkaar vergeleken worden. De $table_new moet geupdate worden en naar een file geschreven worden zodat die door een andere page uitgelezen kan worden (wat al voor elkaar is).

$table_current wordt door een progje steeds veranderd en dus kan het zijn dat er ineens een ip tussen de anderen staat. Dat is geloof ik al goed werkende nu.

Het probleem is dus dat ik die update maar niet goed krijg, en dat er 2 lijntjes te veel zijn |:( het wil maar nie lukken

[ Voor 9% gewijzigd door nzyme op 28-02-2004 15:13 . Reden: damn, niet echt leesbaar die code blokken. Nu gelukkig wel :) ]

| Hardcore - Terror |


Acties:
  • 0 Henk 'm!

Verwijderd

zomaar even uit de losse pols...
weet je zeker dat die loops van $i=0;$i<=count kloppen?
volgens mij moet dat alleen kleiner dan zijn omdat je bij een count het aantal array elementen terug krijgt, bijv:
$boe = count($array);
resultaat dat $boe, 5 is.

Maar $array[$boe] bestaat op dat moment niet omdat hij al bij 0 begint te tellen ipv bij 1.

Volg je het nog? :)

Acties:
  • 0 Henk 'm!

  • nzyme
  • Registratie: November 2001
  • Laatst online: 29-07 15:47
volg je niet sry
zonder nullen krijg ik dit als output: (met een 1 ipv 0 dus he ;))
code:
1
2
3
4
5
#192.168.168.15/800/600/700
#192.168.168.251/600/700/300
#/0/0/0
#/0/0/0
#///

[ Voor 9% gewijzigd door nzyme op 28-02-2004 16:05 ]

| Hardcore - Terror |


Acties:
  • 0 Henk 'm!

Verwijderd

ik bedoel dit soort lusjes:

for ( $i = 0; $i <=count($data_current); $i++ ){

je gaat daar
table_new vullen op indexen die niet eens bestaan in data_current

bij: er zitten 3 waardes in data_current
als je die loop door gaat en $i==3
dan gebeurd er dus dit:
$table_new[$i]=$iets[$i];
maar met

<=count($array) kom je dus altijd 1 hoger uit dan er werkelijk aanwezig is in die array.

sorry heb weinig tijd om goeie uitleg te geven
doe hier en daar eens een var_dump() van arrays dan zie je wel verschillen denk ik

Acties:
  • 0 Henk 'm!

  • nzyme
  • Registratie: November 2001
  • Laatst online: 29-07 15:47
*schop*

lekker nuttig, schoppen zonder in te gaan op de laatst gegeven suggesties :?

[ Voor 89% gewijzigd door curry684 op 01-03-2004 14:30 ]

| Hardcore - Terror |


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Je hebt 2 problemen:

1. die legde woeitje al uit en zit in de for-loop
2. je string begint met een # en als je hierop explode is je eerste string ''.

Resultaat is 2 loze regels in je output.

Niks wat je met een beetje debuggen zelf niet had kunnen vinden iig..

[ Voor 30% gewijzigd door Bosmonster op 01-03-2004 12:30 ]

Pagina: 1