[英]PHP: CURL function using a form?
我正在尝试使用PHP将英国邮政编码转换为多头和点。
因此,我将使用PHP CURL并使用更易于实现的替代提供程序,而不是使用Google地图。
但是,我在使CURL函数使用表单中的输入字段返回任何内容时遇到问题。
基本上,我只需要在表单的输入字段中放入邮政编码,然后按搜索,它应该使用CURL并返回该邮政编码的长和纬度,但是我的代码不这样做,而是打印输入字段网址栏中的值就可以了!
这是我的整个代码:
<?php
error_reporting(-1);
ini_set('display_errors', 'On');
if (isset($_POST["postcode"])) {
function postCode2Geog($code){
//$code = strtolower(str_replace(' ','',$code));
$code = $_POST["postcode"];
$uri = "http://www.streetmap.co.uk/streetmap.dll?GridConvert?name=".$code."&type=Postcode";
$ch = curl_init($uri);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
preg_match('#long</strong> \(wgs84\)\s*?\<\/td\>\s*?\<td width="50%" align="center" valign="middle"\>\S{2,3}:\S{2}:\S{2} \( (.*?) \)#i',$output,$longMatch);
preg_match('#lat</strong> \(wgs84\)\s*?\<\/td\>\s*?\<td width="50%" align="center" valign="middle"\>\S{2,3}:\S{2}:\S{2} \( (.*?) \)#i',$output,$latMatch);
$long = $longMatch[1];
$lat = $latMatch[1];
return array($lat,$long);
}
}
?>
这是HTML部分:
<form action="" method="GET">
<input type="text" name="postcode" />
<input type="submit" value="search" >
</form>
有人可以为此提供建议吗?
编辑:
error_reporting(-1);
ini_set('display_errors', 'On');
if (isset($_POST["postcode"])) {
//$code = strtolower(str_replace(' ','',$code));
$code = $_POST["postcode"];
$uri = "http://www.streetmap.co.uk/streetmap.dll?GridConvert?name=".$code."&type=Postcode";
$ch = curl_init($uri);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
preg_match('#long</strong> \(wgs84\)\s*?\<\/td\>\s*?\<td width="50%" align="center" valign="middle"\>\S{2,3}:\S{2}:\S{2} \( (.*?) \)#i',$output,$longMatch);
preg_match('#lat</strong> \(wgs84\)\s*?\<\/td\>\s*?\<td width="50%" align="center" valign="middle"\>\S{2,3}:\S{2}:\S{2} \( (.*?) \)#i',$output,$latMatch);
$long = $longMatch[1];
$lat = $latMatch[1];
return array($lat,$long);
}
首先,由于要使用$_POST
变量,则需要将表单方法更改为POST
<form action="" method="POST">
您也从未真正调用过函数,但是您永远不会知道,因为当您检查if(isset($_POST['whatever']))
,它将永远不会被设置,因为您一直在使用GET
作为form方法。
您需要在该代码块之外定义函数,然后从内部调用它。
这是一个工作示例:我使用了一个单独的函数来执行cURL以返回任何错误
<?php
if(isset($_POST['postcode'])){
$data = postCode2Geog($_POST['postcode']);
var_dump($data);
}else{
displayForm();
}
function displayForm(){
echo "<form action='' method='post'>";
echo "<input type='text' name='postcode' />";
echo "<input type='submit' value='search' />";
echo "</form>";
}
function postCode2Geog($code){
$code = urlencode($code);
$uri = "http://www.streetmap.co.uk/streetmap.dll?GridConvert?name=$code&type=Postcode";
$output = url_get_contents($uri);
preg_match('#long</strong> \(wgs84\)\s*?\<\/td\>\s*?\<td width="50%" align="center" valign="middle"\>\S{2,3}:\S{2}:\S{2} \( (.*?) \)#i',$output,$longMatch);
preg_match('#lat</strong> \(wgs84\)\s*?\<\/td\>\s*?\<td width="50%" align="center" valign="middle"\>\S{2,3}:\S{2}:\S{2} \( (.*?) \)#i',$output,$latMatch);
$long = $longMatch[1];
$lat = $latMatch[1];
return array('lat'=>$lat,'long'=>$long);
}
function url_get_contents($url){
$crl = curl_init();
$timeout = 10;
curl_setopt_array($crl, array(
CURLOPT_URL => $url,
CURLOPT_ENCODING => 'UTF-8',
CURLOPT_RETURNTRANSFER => '1',
CURLOPT_FOLLOWLOCATION => '1',
CURLOPT_CONNECTTIMEOUT => $timeout)
);
$ret = curl_exec($crl);
$info = curl_getinfo($crl);
if ($ret === false || $info['http_code'] != 200) {
$ret = "No cURL data returned for $url [". $info['http_code']. "]";
if (curl_error($crl))
$ret .= "<br>\n Error: ". curl_error($crl) . "Code: " . curl_errno($crl);
}
curl_close($crl);
return $ret;
}
EC1R 4RR返回
array(2) { ["lat"]=> string(9) "51.526254" ["long"]=> string(9) "-0.109119" }
在那里进行了编辑,因此您至少可以看到数组中的哪个。 要使用它们,您将使用$data['lat']
和$data['long']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.