Explode() met spatie
Hallo ik heb een txt met daarin een log van een of ander progie. en nou wil ik ene paar dingen daar uit halen. Ik heb een goed idee van hoe ik dat wil doen maar php wilt niet meewerken. Het exploden op spatie wilt maar niet lukken. Dit is een heel simpele versie van het script. echo $data; geeft 5 mb aan tekst met een paar 100 spaties. functie explode geeft niks.... is er misschien een code zoals \t en \n voor een spatie. Of zou het kunnen dat dit geen echte spatie is :/ want volgesnmij heb ik wel vaker ge-explode op een spatie.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?
set_time_limit(0);
$data = '';
$i = 1;
$file = fopen ("netscreen.txt", "r");
while (!feof ($file)) {
$data .= fgets($file, 4096);
}
fclose ($file);
$data = addslashes($data);
echo $data;
$data = explode(' ','SPATIE',$data);
echo $data[1];
echo $data[2];
echo $data[3];
echo $data[4];
echo $data[5];
echo $data[6];
?>
set_time_limit(0);
$data = '';
$i = 1;
$file = fopen ("netscreen.txt", "r");
while (!feof ($file)) {
$data .= fgets($file, 4096);
}
fclose ($file);
$data = addslashes($data);
echo $data;
$data = explode(' ','SPATIE',$data);
echo $data[1];
echo $data[2];
echo $data[3];
echo $data[4];
echo $data[5];
echo $data[6];
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
LOL ja klopt. dat was fout. Maar die fout heb ik pas op t laatst gemaakt. Even verschil tussen wat wel en wat nie werkt:
WEL:
dit geeft:
145.76.0.7 sxn-ns1: NetScreen device_id=sxn-ns1 system-notification-00257(traffic): start_time=\"2003-09-30 11:12:52\" duration=0 policy_id=138 service=NETBIOS (NS) proto=17 src zone=Untrust dst zone=Trust action=Deny sent=0 rcvd=0 src=80.15.220.12 dst=145.76.124.234 src_port=34162 dst_port=137<000> 2003-09-30 11:12:53
NIET:
Geeft:
NetScreen
device_id=sxn-ns1
Ik zie het verschil niet zo beide loops zijn volgensmij he zelfde. En toen ik net bij de $data helemaal bovenaan die explode deed werkte het WEL.
edit: het gaat me nu niet over die ergi want die zal ook wel fout zitten op dit moment maar dat kan ik zelf oplossen :)
WEL:
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
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
<?
set_time_limit(0);
$data = '';
$i = 1;
$file = fopen ("netscreen.txt", "r");
while (!feof ($file)) {
$data .= fgets($file, 4096);
}
fclose ($file);
$data = addslashes($data);
//echo $data;
/*
"2003-09-30 11:12:52"
policy_id=138
action=Deny
src=80.15.220.12
dst=145.76.124.234
dst_port=137
*/
$data_arr = explode('Local0.Notice', $data);
while ($i > 0 AND !empty($data_arr[$i]))
{
$ii = 1;
$dataat = $data_arr[$i];
echo $dataat."<br />";
$i++;
}
?>
set_time_limit(0);
$data = '';
$i = 1;
$file = fopen ("netscreen.txt", "r");
while (!feof ($file)) {
$data .= fgets($file, 4096);
}
fclose ($file);
$data = addslashes($data);
//echo $data;
/*
"2003-09-30 11:12:52"
policy_id=138
action=Deny
src=80.15.220.12
dst=145.76.124.234
dst_port=137
*/
$data_arr = explode('Local0.Notice', $data);
while ($i > 0 AND !empty($data_arr[$i]))
{
$ii = 1;
$dataat = $data_arr[$i];
echo $dataat."<br />";
$i++;
}
?>
dit geeft:
145.76.0.7 sxn-ns1: NetScreen device_id=sxn-ns1 system-notification-00257(traffic): start_time=\"2003-09-30 11:12:52\" duration=0 policy_id=138 service=NETBIOS (NS) proto=17 src zone=Untrust dst zone=Trust action=Deny sent=0 rcvd=0 src=80.15.220.12 dst=145.76.124.234 src_port=34162 dst_port=137<000> 2003-09-30 11:12:53
NIET:
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
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
<?
set_time_limit(0);
$data = '';
$i = 1;
$file = fopen ("netscreen.txt", "r");
while (!feof ($file)) {
$data .= fgets($file, 4096);
}
fclose ($file);
$data = addslashes($data);
//echo $data;
/*
"2003-09-30 11:12:52"
policy_id=138
action=Deny
src=80.15.220.12
dst=145.76.124.234
dst_port=137
*/
$data_arr = explode('Local0.Notice', $data);
while ($i > 0 AND !empty($data_arr[$i]))
{
$ii = 1;
$dataat = $data_arr[$i];
//echo $dataat."<br />";
$dataat_arr = explode(' ', $dataat);
while ($ii > 0 AND !empty($dataat_arr[$ii]))
{
echo $dataat_arr[$ii]."<br />";
if (eregi("^src=(.*)$",$data2_arr[$ii]))
echo "YES SRC GEVONDEN";
$ii++;
}
$i++;
}
?>
set_time_limit(0);
$data = '';
$i = 1;
$file = fopen ("netscreen.txt", "r");
while (!feof ($file)) {
$data .= fgets($file, 4096);
}
fclose ($file);
$data = addslashes($data);
//echo $data;
/*
"2003-09-30 11:12:52"
policy_id=138
action=Deny
src=80.15.220.12
dst=145.76.124.234
dst_port=137
*/
$data_arr = explode('Local0.Notice', $data);
while ($i > 0 AND !empty($data_arr[$i]))
{
$ii = 1;
$dataat = $data_arr[$i];
//echo $dataat."<br />";
$dataat_arr = explode(' ', $dataat);
while ($ii > 0 AND !empty($dataat_arr[$ii]))
{
echo $dataat_arr[$ii]."<br />";
if (eregi("^src=(.*)$",$data2_arr[$ii]))
echo "YES SRC GEVONDEN";
$ii++;
}
$i++;
}
?>
Geeft:
NetScreen
device_id=sxn-ns1
Ik zie het verschil niet zo beide loops zijn volgensmij he zelfde. En toen ik net bij de $data helemaal bovenaan die explode deed werkte het WEL.
edit: het gaat me nu niet over die ergi want die zal ook wel fout zitten op dit moment maar dat kan ik zelf oplossen :)
Gewijzigd op 24/01/2005 20:26:00 door Roy Bongers
Ok ik heb de fout gevonden. t bleek dat ergens in die loop de var leeg kwam te zitten een daardoor stopte men loop er mee. Nu moet ik alleen een andere manier zien te vinden om te kijken wanneer men file ophoud.
iig bedankt :)
iig bedankt :)
Nog even een ander vraagje.
In die logfile staan wel meer als 100.000 logs. Deze komen dan allemaal in de database te staan. Kan het zijn dat het dan uber lang gaat duren voordat het complete script klaar is of heeft dat alleen maar effect als je iets uit de database haalt?
Nu insert hij elke log en voert op het einde een keer een select query uit.
Alvast bedankt :)
In die logfile staan wel meer als 100.000 logs. Deze komen dan allemaal in de database te staan. Kan het zijn dat het dan uber lang gaat duren voordat het complete script klaar is of heeft dat alleen maar effect als je iets uit de database haalt?
Nu insert hij elke log en voert op het einde een keer een select query uit.
Alvast bedankt :)
insert je dan niet alles overnieuw de volgende keer dat je het script draait?




