curl 响应在变量 PHP 中保存后无法处理


curl response cannot be handled after saved in a variable PHP

$ch = curl_init("http://acrs.bboxpr.com/getAddress.php?lat=35.545112&lng=-90.657635");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$address = curl_exec($ch);       
curl_close($ch);
//prints the address
echo $address;
//$token = strtok($address, ",");
//$phaddress=array();
//while ($token != null)
//{
//array_push($phaddress,$token);
//$token = strtok(",");
//}
//print_r($phaddress); //blank

在该行中,echo $address;将打印在页面中的内容中,但是如果我取消注释下面的代码(以:$token=strtok开头的代码),$address看起来会是空的。我添加了更多使用结果$address的代码(但我没有在这里包含它),有时会出现在 curl 初始化中调用的站点的源代码。 所以我想也许卷曲需要更长的时间,但我试图在 srtok 之前睡觉,但没有奏效。

while循环中,您必须将$token = strtok(",");替换为$token = strtok($address, ",");

由于您正在从谷歌获取MAP信息,我认为您使用了错误的javascript,因为这可能更难以解析

你为什么不尝试直接使用PHP

$ch = curl_init("http://maps.google.com/maps/api/geocode/json?latlng=35.545112,-90.657635&sensor=false");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$return = curl_exec($ch);
curl_close($ch);
$geoOutput = json_decode($return,true);
echo "<pre>" ;
foreach($geoOutput as $key => $data)
{
    if(is_array($data))
    {
        foreach($data as $cKey => $cData)
        {
            var_dump($cData['formatted_address']);
        }
    }
}

输出

string(43) "6724-6916 Bay Ln, Harrisburg, AR 72432, USA"
string(16) "Bolivar, AR, USA"
string(25) "Harrisburg, AR 72432, USA"
string(17) "Poinsett, AR, USA"
string(13) "Arkansas, USA"

将 while 循环更改为以下内容:while ($token !== false)