gegevens zenden via url???
Ik ben een newbie in PHP en ik zoek naarstig wat hulp.
Ik zoek al 3 dagen op allerlei forums over Post en Get en socket maar ik zit een beetje vast.
Ik heb een apparaat dat NMEA (GPS) gegevens verzend via GPRS.
Deze gegevens komen binnen op mijn server en worden in een PHP script netjes goed gezet in de string $HttpData in tekst ziet dat er als vervolgend uit longitude=4.34468&latitude=51.8762&altitude=1&speed=23.11296&heading=294.4&date=20080603&time=123324&imei=357541000234567
Vervolgens en dan komt mijn probleem moet ik deze gegevens doorsturen naar een .ASPX bestand.
Als ik handmatig in een url de data vezend dan pakt mijn server alles goed op.
Deze url ziet er als volgend uit.
www.mijnserver.nl/gate.aspx?longitude=4.34468&latitude=51.8762&altitude=1&speed=23.11296&heading=294.4&date=20080603&time=123324&imei=357541000234567
Ik heb een stukje PHP in eerder genoemde bestand maar dat lijkt niet te werken:
$ForwardHost="www.mijnserver.nl"; //The host name of the computer to forward to like www.hostname.com ("localhost" can be used for a script on the same computer).
$ForwardScript="/Gate.aspx?"; //The name and path of the script on the host computer to forward to.
$ForwardPort=80; //The port number to be used for forwarding (usually 80 in case of HTTP forwarding).
$ForwardAcknowledgeResponse="OK"; //The receiver of the forwarded data uses this in a positive
$HttpData=
'longitude='.urlencode(substr($longitude,0,7))
.'&latitude='.urlencode(substr($latitude,0,7))
.'&altitude='.urlencode($altitude)
.'&speed='.urlencode($speed)
.'&heading='.urlencode($heading)
//.'&date='.urlencode($DateTime)
//.'&time='.urlencode($DateTime)
.'&date='.urlencode(substr($DateTime,0,8))
.'&time='.urlencode(substr($DateTime,-6))
.'&imei='.urlencode($imei);
$Response=''; //This variable will be filled with the response to the data that we forward
if($hSocket=@fsockopen($ForwardHost, $ForwardPort, $errno, $errstr, 5)) //Connect to the forward server
{
//Construct standard HTTP POST command that contains the binary data that we received from
//the module (e.g. photo) and all items that you have put in the $HttpData variable above.
$Post="POST $ForwardScript$HttpData"
."Host: $ForwardHost:$ForwardPort\r\n"
."Content-Type: text/html\r\n"
."Content-Length: ".strlen($Post)."\r\n\r\n";
if(fwrite($hSocket, $Post)==strlen($Post)) //Send HTTP POST command
{
while(!feof($hSocket)) $Response.=@fread($hSocket, 1024); //Read full response from the receiver
} else LogError("Unable to transmit a full HTTP POST to forward the data. The receiving party allows a connection, but the receiving program/script does not (exist?)"); //Write to error log
@fclose($hSocket);
} else LogError($errstr); //Write the error about not being able to connect to the error log.
if(!strlen($Response)) break; //Stop forwarding data until the module tries to send it again.
//send a new transmission resending the same data again.
if(strpos($Response, $ForwardAcknowledgeResponse)===false)
{
//The response to the forwarded data does not contain the positive acknowledge.
LogError("The response that was received in answer to the forwarded data does not contain the expected positive acknowledge string.\r\n--- Forward transmission: $ForwardScript$HttpData\r\n--- Expected positive acknowledge string: $ForwardAcknowledgeResponse\r\n--- Received response:\r\n$Response\r\n");
break; //Stop forwarding data, because it is not accepted. The module will try to resend it again later.
*****************************************************************
Kan of wil iemand mij helpen? met deze code of een nieuwe code, andere methode??
Ik zeg het al ik ben een newbie in PHP. Ik zal de hulp erg waarderen!
Groeten uit Zeeland en bij voorbaat dank.
Ron de Man.
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, 'www.mijnserver.nl/gate.aspx?etcetcetc');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 4);
$file_contents = curl_exec($ch);
curl_close($ch);
?>
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, 'www.mijnserver.nl/gate.aspx?etcetcetc');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 4);
$file_contents = curl_exec($ch);
curl_close($ch);
?>
Overigens klinkt HttpData wel erg ouderwets, weet je zeker dat het niet gewoon een aantal $_GET parameters zijn? Heb je bijv. als eens een print_r() uitgevoerd om te kijken wat je allemaal binnen krijgt?
Om te beginnen bedankt voor je reactie.
Ik sta op dit moment open voor alle oplossingen.
De script die ik gebruik is geleverd door de maker van mijn GPS apparaat.
Deze geven echter verder geen ondersteuning op web / programeer gebied.
Zelf oplossen dus.
Daarom is de $HttpData door mij overgenomen.
Als ik deze echo in mijn PHP bestand dan zie ik dat hij de volgende data netjes heeft opgebouwd.
longitude=4.34468&latitude=51.8762&altitude=1&speed=23.11296&heading=294.4&date=20080603&time=123324&imei=357541000234567
Daarom vermoed ik nu dat er iets niet goed gaat met het juist verzenden.
Omdat ik geen echte ervaring heb met PHP weet ik niet goed hoe ik dit dus kan oplossen.
Ik vermoed dat er iets niet klopt in het formaat txt/Html e.d.
Het $_Get begrijp ik niet goed.
Als ik de echo van $HttpData knip en plak na de url www.mijnserver.nl/gate.aspx?latitude etc..................
Dan loopt het netjes mijn server binnen waar het ook in de MySql data base loopt. Dat is kennelijk het probleem niet.
Het juist verzenden is mijn probleem daar ben ik redelijk zeker van.
Ik zal jou voorbeeld met curl eens testen of dat werkt. Je hoort het.
GRTZ Ron de M.
Je hebt me geholpen, Jouw voorbeeld script even getest. Werkte direct.
Daarna de losse tekst omgezet naar mijn $strings en voila het werkt.
Geweldig.
Ben weer een sprong vooruit TOP.
De code waar het om ging en ik nu gebruik is
$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);
Heel erg bedankt voor het delen van je kennis. Top