繁体   English   中英

PHP:使用CURL函数的形式?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM