我是curl和php的新手。其实我正在研究这个示例代码:
我使用此API在换行符中接收响应(\ n)。
$client_ip = @$_SERVER['HTTP_CLIENT_IP'];
$forward_ip = @$_SERVER['HTTP_X_FORWARDED_FOR'];
$remote_ip = $_SERVER['REMOTE_ADDR'];
if (filter_var($client_ip, FILTER_VALIDATE_IP)){
$visitor_ip = $client_ip;
} elseif (filter_var($forward_ip, FILTER_VALIDATE_IP)){
$visitor_ip = $forward_ip;
} else {
$visitor_ip = $remote_ip;
}
$url = "http://ip-api.com/line/".$visitor_ip."?fields=city";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL,$url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$visitor_city = curl_exec($curl);
curl_close($curl);
echo $visitor_city;
结果:
New York
结果是正确的。我在纽约,代码显示我的城市。但是当我添加IF时,出现了错误:
if ($visitor_city == "New York") {
echo " TRUE!";
}
我的结果如果:
New York
但我想要结果
New York TRUE!
我错过了什么?服务器配置?
答案 0 :(得分:1)
我会添加一个调试行输出,以查看该返回值周围是否有任何空格。
echo "<pre>(".$visitor_city.")</pre>";
如果你看到“New York”和你的parens之间有任何新的行或空格,那么就有空格,所以if eval会返回false。
甚至可能在返回值中有HTML。
甚至可能很简单
echo strlen($visitor_city);
会有所帮助,因为你可以计算出预期的字符,如果更多的话,还有空格和/或HTML标签。
或只打印任何特殊的HTML字符
echo htmlspecialchars($visitor_city);
您甚至可以只查看输出中的来源,看看是否有任何额外的内容。
答案 1 :(得分:1)
使用trim()
尝试一个: -
if (trim($visitor_city) == "New York") {
echo " TRUE!";
}