卷曲显示但不返回数据

时间:2017-09-22 10:55:37

标签: php curl return

我正在尝试编写一个简单的curl函数,该函数使用站点访问者的IP地址查询freegeoip.net站点。这通常是通过输入" https://freegeoip.net/csv/ {IP地址}"来完成的。在浏览器地址行中。然后,站点处理请求并返回可以打开或保存的csv文件。我试图直接访问csv数据,以便我可以解析和使用它。这是我正在使用的代码:

<?php

$ip=$_SERVER["REMOTE_ADDR"];
$geturl = "http://freegeoip.net/csv/".$ip;
$data = curl_get_contents($geturl);
echo ("<br>Data = '".$data."'<br>");

function curl_get_contents($url)
{
    $ch = curl_init($url);
    if($ch)
    {
        $tmp = curl_exec($ch);
        curl_close($ch);
        return $tmp;
    }
    else
    {
        echo "Curl not loaded!<br>";
    }
}

?>

这就是我要回来的:

,美国,美国,ST,州,市,?????,America / New_York,< strong>。*****, - 。****,***

数据=&#39; 1&#39;

如您所见,我的函数是访问并显示csv数据,但未将其返回到$ data变量。显然,数据是在&#34; curl_exec($ ch);&#34;正在执行命令。我想解析并使用返回的数据但不能返回数据。我做错了什么?

3 个答案:

答案 0 :(得分:0)

你需要在curl_exec之前添加以下行,否则结果将输出而不是将其返回到$ tmp变量。

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

答案 1 :(得分:0)

curl_exec()的文档说:

  

返回值

     

成功时返回TRUE或失败时返回FALSE。但是,如果设置了CURLOPT_RETURNTRANSFER选项,则会在成功时返回结果,失败时会返回FALSE

CURLOPT_RETURNTRANSFER选项的curl_setopt()的文档页面中解释了它未说的内容:

  

选项: CURLOPT_RETURNTRANSFER
  将值设置为: TRUE将传输作为返回值curl_exec()的字符串返回,而不是直接输出。

也就是说,默认情况下,curl_exec()输出它获得的响应的主体。为了使其返回值而不输出它,您必须使用curl_setopt()

$ch = curl_init($url);
curl_exec($ch, CURLOPT_RETURNTRANSFER, TRUE);
$result = curl_exec($ch);
curl_close($ch);

答案 2 :(得分:0)

你并没有告诉Curl您希望返回数据而不是输出数据:

 $ch = curl_init();
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, True);
 curl_setopt($ch, CURLOPT_URL, "http://freegeoip.net/csv/".$ip);
 $csv=curl_exec($ch);

但是,根据您的配置,您可以:

,这是相当冗长的
 $csv=file_get_contents("http://freegeoip.net/csv/".$ip);