Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[PHP] explode functie vraag

Pagina: 1
Acties:

  • ZeroCode
  • Registratie: Februari 2002
  • Laatst online: 22-10 10:28
ik heb de volgende 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
<?php

$input = shell_exec('tail -n 20 /var/log/ufw.log'); // get from system
$input_exp = explode("\n", $input); // turn into arrays
$host = shell_exec('hostname -s');
echo "
    <table class='table'>
      <thead>
        <th><span class='color'>Date</span></th>
        <th><span class='color'>Ip</span></th>
        <th><span class='color'>Port</span></th>
      </thead>
";


foreach ($input_exp as $line) { // for each line
        $datelog = explode($host, $line);

        $tempip = explode(" DST", $datelog[1]);
        $ip = explode(" SRC=", $tempip[0]);

        $tempport = explode(" WINDOW=", $datelog[1]);
        $port = explode(" DPT=", $tempport[0]);
        $cleanport = explode(" ", $port[1]);

        echo "<tr><td>".$datelog[0]."</td><td>".$ip[1]."</td><td>".$cleanport[0]."</td><td>".$parts[2]."</td><td>".$parts[3]."</td><td>".$parts[4]."</td></tr>"; // $
}
echo "</table>";
?>


Nu werkt explode niet, als ik een $host echo staat daar letterlijk mijn hostname in. Maar als ik het zoals hierboven gebruik werkt de explode niet. Vul ik zelf het volgende in $datelog = explode('ks3370000', $line); dan werkt de explode wel.

Het zoeken op php explode $variable geeft wel voorbeelden maar niet hoe je een variabele delimter kunt gebruiken. Volgens mij ben ik in heel de verkeerde richting aan het zoeken. Iemand een tip?

[ Voor 18% gewijzigd door BtM909 op 13-10-2013 18:28 ]


  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Heb je al gekeken op http://www.php.net/explode? :) De documentatie van deze functie is er volgens mij wel goed genoeg. :) Wat 'werkt' er niet trouwens, krijg je een foutmelding of parse error bijvoorbeeld? Of krijg je gewoon niet de verwachtte output? In het laatste geval zou het betekenen dat je de functie verkeerd gebruikt.

Daarnaast doe je ook geen explode op $host, $input_exp is de array die explode() vult.

[ Voor 12% gewijzigd door CH4OS op 13-10-2013 11:34 ]


  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 15:32

Onbekend

...

Je doet verder niets met de variabele $datelog in jouw voorbeeld, is dat misschien het probleem.
Heb je ook een voorbeeld waarin je de variabelen $host en $input_exp al vooraf hebt ingevuld?

Speel ook Balls Connect en Repeat


  • ZeroCode
  • Registratie: Februari 2002
  • Laatst online: 22-10 10:28
Op php.net had ik idd al gekeken, maar wat ik daar zie zijn statische strings in de vorm van delimit op '\' of ' ' e.d. Maar mijn input variable is hostname -s welke ik in $host opsla.
Daarnaast doe je ook geen explode op $host, $input_exp is de array die explode() vult.
Dit snap ik niet. Ik explode op $line neem ik aan toch? Dat is mijn input?

  • Damic
  • Registratie: September 2003
  • Laatst online: 12:57

Damic

Tijd voor Jasmijn thee

@CptChaos: in de foreach staat ook nog een explode.
@Onbekend: nu je zegt daar staat geen echo :p mmmh heeft eerste post aangepast :o

[ Voor 17% gewijzigd door Damic op 13-10-2013 11:39 ]

Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag


  • ZeroCode
  • Registratie: Februari 2002
  • Laatst online: 22-10 10:28
Onbekend schreef op zondag 13 oktober 2013 @ 11:37:
Je doet verder niets met de variabele $datelog in jouw voorbeeld, is dat misschien het probleem.
Heb je ook een voorbeeld waarin je de variabelen $host en $input_exp al vooraf hebt ingevuld?
Ik heb mijn orginele startpost aangepast, maar de code is nog zo basic dat ik me er lichtelijk voor schaamde haha.

  • Damic
  • Registratie: September 2003
  • Laatst online: 12:57

Damic

Tijd voor Jasmijn thee

Kun je ook eens een paar lijnen posten van het bestand?

Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag


  • ZeroCode
  • Registratie: Februari 2002
  • Laatst online: 22-10 10:28
Damic schreef op zondag 13 oktober 2013 @ 11:40:
Kun je ook eens een paar lijnen posten van het bestand?
code:
1
2
3
Oct 13 10:48:10 ks3370000 kernel: [UFW BLOCK] IN=eth0 OUT= MAC=00:22:4d:aa:b2:e8:10:bd:18:e5:ff:80:08:00 SRC=216.244.65.252 DST=37.187.104.100 LEN=40 TOS=0x00 PREC=0x00 TTL=104 ID=256 PROTO=TCP SPT=6000 DPT=5900 WINDOW=16384 RES=0x00 SYN URGP=0 
Oct 13 11:12:19 ks3370000 kernel: [UFW BLOCK] IN=eth0 OUT= MAC=00:22:4d:aa:b2:e8:1c:e6:c7:52:07:40:08:00 SRC=219.142.48.227 DST=37.187.104.100 LEN=48 TOS=0x00 PREC=0x00 TTL=236 ID=5067 DF PROTO=TCP SPT=40132 DPT=1433 WINDOW=16384 RES=0x00 SYN URGP=0 
Oct 13 11:12:19 ks3370000 kernel: [UFW BLOCK] IN=eth0 OUT= MAC=00:22:4d:aa:b2:e8:1c:e6:c7:52:07:40:08:00 SRC=219.142.48.227 DST=37.187.104.100 LEN=48 TOS=0x00 PREC=0x00 TTL=236 ID=5072 DF PROTO=TCP SPT=8473 DPT=3128 WINDOW=16384 RES=0x00 SYN URGP=0


Ik weet dat ik het heel knullig is om te splitten op vaste waardes en dat het waarschijnlijk 10 keer beter is om regex te gebruiken maar om eerlijk te zijn leek dit me makkelijker.

[ Voor 9% gewijzigd door MueR op 13-10-2013 11:47 . Reden: log even in een code block gezet voor leesbaarheid :) ]


  • Damic
  • Registratie: September 2003
  • Laatst online: 12:57

Damic

Tijd voor Jasmijn thee

Ik vermoed dat die ks3370000/ks3374793 een server naam is?

Voor cleanport kun je beter $cleanport = trim($port[1]); gebruiken.

Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag


  • ZeroCode
  • Registratie: Februari 2002
  • Laatst online: 22-10 10:28
ks3370000 is idd een servernaam.
Als ik trim gebruik blijft er het eerste getal over.

[ Voor 45% gewijzigd door ZeroCode op 13-10-2013 11:52 ]


  • Douweegbertje
  • Registratie: Mei 2008
  • Laatst online: 30-10 12:53

Douweegbertje

Wat kinderachtig.. godverdomme

Je wilt dus
code:
1
$datelog = explode($host, $line);

gebruiken?

Check dan even wat er in $host komt te staan met een print_r.
Als het 'statisch' wel werkt, dan zal deze var wel verkeerd zijn geset (array, of met spaties of.. etc).

  • Damic
  • Registratie: September 2003
  • Laatst online: 12:57

Damic

Tijd voor Jasmijn thee

Zelf maak ik meer gebruik van loops en een start en einde van elke zoek.
PHP:
1
2
3
4
5
6
7
if((is_integer($str_dst_start=strpos(strtolower($line),'dst='))))
{
if((is_integer($str_dst_stop=strpos(strtolower($line,$str_dst_start+4),' '))))
{
$ip_adress = substr($line,$str_dst_start,$str_dst_stop-1)
}
}


Edit: nu je het zegt, was weer niet mee 8)7, zie eens wat er in host staat en maak dat even proper.

[ Voor 14% gewijzigd door Damic op 13-10-2013 12:02 ]

Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag


  • ZeroCode
  • Registratie: Februari 2002
  • Laatst online: 22-10 10:28
douweegbertje schreef op zondag 13 oktober 2013 @ 11:57:
Je wilt dus
code:
1
$datelog = explode($host, $line);

gebruiken?

Check dan even wat er in $host komt te staan met een print_r.
Als het 'statisch' wel werkt, dan zal deze var wel verkeerd zijn geset (array, of met spaties of.. etc).
print_r($host) geeft mijn hostname. Wat mij wel op het volgende idee bracht:
trim($host) gaf de oplossing! Onzichtbare spatie in de variabele, dom dom dom :(

Super bedankt allemaal!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Damic schreef op zondag 13 oktober 2013 @ 12:01:
Zelf maak ik meer gebruik van loops en een start en einde van elke zoek.
PHP:
1
2
3
4
5
6
7
if((is_integer($str_dst_start=strpos(strtolower($line),'dst='))))
{
if((is_integer($str_dst_stop=strpos(strtolower($line,$str_dst_start+4),' '))))
{
$ip_adress = substr($line,$str_dst_start,$str_dst_stop-1)
}
}


Edit: nu je het zegt, was weer niet mee 8)7, zie eens wat er in host staat en maak dat even proper.
offtopic, nofi, maar mag hopen dat je wel intending gebruikt, dit is niet te lezen. ;)

  • kwaakvaak_v2
  • Registratie: Juni 2009
  • Laatst online: 10-10 08:02
intending??
Intending: Purposing to become or be; prospective: intending lawyers; an intending contributor.
Als je er een advocaat tegen aan mikt wordt het vaak niet leesbaarder, eerder wolliger van ;)

Driving a cadillac in a fool's parade.

Pagina: 1