parsen op comma in url??
Ik heb een uitdaging (althans voor mij).
Ik krijg op m'n server de volgende http aangeboden op een in.php script.
http://www.mijnserver.nl/in.php?BOM,,,,,,,,,,,,,,,,,,,,,,,,,,EOM
achter begin of message BOM, staan 30 velden en dan End of message.
Nu zou ik graag deze string parsen en van elk gegeven achter de komma een variable maken zodat ik het verder kan verwerken. De gegevens BOM en EOM kunnen achterwege worden gelaten.
Detail is dat er variabele data lengtes tussen de komma's kunnen staan. dat kan varieren van niks tot 1 cijfer of 16 letters en elke zending weer anders.
Ik zelf heb een opzet met (substr(($key),41,1)) geprobeerd maar dat werkt niet ivm de variabele lengte van de string.
Ik hoop dat mijn uitdaging iemand triggert om een opzet te maken of mij in de goede richting te zetten.
alvast bedankt,
Ron.
http://www.mijnserver.nl/in.php?varnaam=BOM,,,,,,,,,
$messages = explode(',',$string);
Hipska schreef op 11.06.2008 10:27:
$messages = explode(',',$string);
en dan
Nee het is zoals ik het heb geschreven. Kaal achter de url http://www.mijnserver.nl/in.php?BOM,080608,133230,5128.3680,N,0336.2895,E,S,0,0,M,TST,173,113,30,01.2,12.73,1864,204,4,3,1,GPRS,,,,06, EOM
Dit is even een stukje voor beeld dan spreekt het mogelijk meer.
Het wordt namelijk door een GPS ontvanger via gprs ge urlforward naar m'n server en aan geboden aan in.php.
De enige 2 constanten die er in zitten zijn dat voor elke data een komma staat en dat er 30 variabelen in staan achter elke comma.
Alvast bedankt voor de vlotte reactie.
Toch wel hoor Jurgen, doe maar eens print_r($_GET); als je hem daar ziet, kan je er aan ;-)
Jurgen en Hipska en SanThe,
ik heb even zitten googelen op de explode functie en dat lijkt me wel wat.
Als ik print_r($_GET) gebruik dan zie ik inderdaad de string.
Ik denk dat e.a. wel eens zou kunnen werken.
Ik ga e.a. eens uit testen op de data.
Bedankt en ik laat het wel even weten.
grtz Ron.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
$var = array_keys($_GET);
$explode = explode(',', $var[0]);
foreach($explode as $value)
{
echo '<br />';
echo $value;
}
?>
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
$var = array_keys($_GET);
$explode = explode(',', $var[0]);
foreach($explode as $value)
{
echo '<br />';
echo $value;
}
?>
Heb ik eens even wat zitten testen.
Het werkt laten we dat voorop stellen.
Wat ik alleen mis het definieren van de variablen en er is een probleem met de punt.
Omdat ik wederom aan het einde een variable nodig heb om het door te sturen in de juiste volgorde. samengesteld in $HttpData
Ik heb zelf eens een kwartje gegooid in de google machine en ben op dit ruwe stuk uit gekomen na wat mixen.
list($Im, $Leeg, $dat, $time, $long, $N, $lat, $E, $status, $naam, $divid, $heading, ) = explode(',', key($_GET));
$HttpData = $im$long$lat$naam..enz.
als ik deze laat lopen krijg ik een mooie string om te verzenden.
De genoemde punt echter is een underscore _ geworden. Weet iemand hoe dat komt en wat er aan te doen is.
Natuurlijk sta ik open voor beter (kortere Hipska ;) ) oplossingen van de list en explode methode.
In iedergeval bedankt voor het vlotte op weg helpen. Top.
P.S. hoe kan ik die mooie vakjes maken zoals jullie voor de broncode.
en code opmaak hokjes verkrijg je door < ?php en ?> te typen
Gewijzigd op 01/01/1970 01:00:00 door Hipska BE
Elke list variabele wordt ge set.
Dan de $HttpData geformeerd om een juste curl te kunnen verzenden.
De getallen 5228.3680 en 0436.2895 worden echter in de echo 5228_3680 en 0436_2895.
Dat ben ik nu met de substr() aan het recht breien maar dat lijkt mij niet echt elegant.
Ik hoop dat dit duidelijker is.
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
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
<?php
$ForwardHost="localhost";
$ForwardScript="/in.php?";
$ForwardPort=80;
/********************************************************************************************
BOM,010101010101010,,080608,133230,5228.3680,N,0436.2895,E,S,0,0,M,Test,I-blue,113,30,01.2,12.73,1864,204,4,3,1,GPRS,,,,06,EOM
*/
// Ontvangen en Parsen van bovenstaande string:
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
list($BOM, $id, $fixNR, $date, $time, $lat, $NRSat, $long, $EW, $S_M, $NR_sat, $speed, $type, $naam, $Div_id, $head, $Leeg, $alti, ) = explode(',', key($_GET));
$HttpData =
'longitude='.(substr(($long),0,2)).'.'.(substr(($long),2,2)).(substr(($long),5,4))
.'&latitude='.(substr(($lat),0,2)).'.'.(substr(($lat),2,2)).(substr(($lat),5,4))
.'&altitude=0'//.(substr(($alti),0,2)).'.'.(substr(($alti),4,1))
.'&speed='.$speed
.'&heading='.$head
.'&date='.$date
.'&time='.$time
.'&imei='.(substr(($id),0,3)).(substr(($id),4,3));
echo $HttpData. '<br />';
// Weer weg zenden......===>
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, "$ForwardHost$ForwardScript$HttpData");
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 4);
$file_contents = curl_exec($ch);
curl_close($ch);
?>
$ForwardHost="localhost";
$ForwardScript="/in.php?";
$ForwardPort=80;
/********************************************************************************************
BOM,010101010101010,,080608,133230,5228.3680,N,0436.2895,E,S,0,0,M,Test,I-blue,113,30,01.2,12.73,1864,204,4,3,1,GPRS,,,,06,EOM
*/
// Ontvangen en Parsen van bovenstaande string:
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
list($BOM, $id, $fixNR, $date, $time, $lat, $NRSat, $long, $EW, $S_M, $NR_sat, $speed, $type, $naam, $Div_id, $head, $Leeg, $alti, ) = explode(',', key($_GET));
$HttpData =
'longitude='.(substr(($long),0,2)).'.'.(substr(($long),2,2)).(substr(($long),5,4))
.'&latitude='.(substr(($lat),0,2)).'.'.(substr(($lat),2,2)).(substr(($lat),5,4))
.'&altitude=0'//.(substr(($alti),0,2)).'.'.(substr(($alti),4,1))
.'&speed='.$speed
.'&heading='.$head
.'&date='.$date
.'&time='.$time
.'&imei='.(substr(($id),0,3)).(substr(($id),4,3));
echo $HttpData. '<br />';
// Weer weg zenden......===>
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, "$ForwardHost$ForwardScript$HttpData");
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 4);
$file_contents = curl_exec($ch);
curl_close($ch);
?>
$string = str_replace('.','_',$long); doet de truck ;)
Hipska schreef op 11.06.2008 14:12:
Jij wil . vervangen door _ ?
$string = str_replace('.','_',$long); doet de truck ;)
$string = str_replace('.','_',$long); doet de truck ;)
volgens mij andersom, dus:
$string = str_replace('_','.',$long);
;-)
Wat er gebeurt weet ik niet maar ik zie dat door het php script de . die in de string staan in de getallen ,5228.3680, en ,0436.2895, ineens??????
in 5228_3680 en 0436_2895 zijn veranderd.
Stel " $long " bevat de waarde " 5228_3680 ".
Dan doe je dus: $string = str_replace('_','.',$long);
en dan bevat " $string " ineens de waarde " 5228.3680 ".
(makkelijker kan ik het toch niet uitleggen? :P)
communiceren is afstemmen op de ontvanger. Kennelijk heb ik dat niet goed gedaan.
Ik begrijp heus wel dat ik dat met die str_replace weer terug kan zetten.
Maar laat ik het eens anders vragen, hoe kan het dat de . in een underscore verandert?
Wat ik eigenlijk probeer te zeggen hoe kan ik voorkomen dat dat gebeurd.
PHP is nieuw voor mij, hoe meer ik begrijp deste sneller ben ik er op los.
Mogelijk een beetje pietluttig van mij om dat te willen maar elke regel code is in mijn ogen te veel. Ik denk dat het dan meer lapmiddel op lapmiddel op lapmiddel wordt en als er dan wat verkeerd gaat zit je met een slechte basis voor fout analyze.
Maar wel bedankt voor je oplossing hoor ik bedoel het zeker niet negatief.
echo key($_GET); // is hij hier al met een underscore?
Dat betekend dat het tijdens het verzenden gebeurd?
ik verzend uit firefox de volgende url.
http://www.server.nl/in.php?BOM,010101010101010,,080608,133230,5228.3680,N,0436.2895,E,S,0,0,M,Test,I-blue,113,30,01.2,12.73,1864,204,4,3,1,GPRS,,,,06,EOM