我正在尝试编写一个简单的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;正在执行命令。我想解析并使用返回的数据但不能返回数据。我做错了什么?
答案 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);