我正在尝试进行一些地理定位,以便在我的WordPress网站的标题中显示某些电话号码。不幸的是,当我应用下面的代码时,我得到以下PHP错误:
[17-Sep-2014 19:48:16 UTC] PHP警告:strpos()[function.strpos]:/ home / domain / public_html / wp-content / themes / Avada / framework / headers /中的空针第87行的header-v4.php
[17-Sep-2014 19:48:16 UTC] PHP警告:strpos()[function.strpos]:/ home / domain / public_html / wp-content / themes / Avada / framework / headers /中的空针第90行的header-v4.php
<?php
$ip = $_SERVER['REMOTE_ADDR'];
$url = "http://freegeoip.net/json/" . $ip;
$json = file_get_contents($url);
$data = json_decode($json, TRUE);
$city = print_r($data['city'], true);
$state = print_r($data['region_code'], true);
$kings_orlando = "Altamonte Springs Apopka Casselberry College Park Heathrow Lake Mary Longwood Maitland Orlando Oviedo Windermere Winter Park Winter Springs";
if ((strpos($kings_orlando,$city) !== false) AND ($state == "FL")) {
echo '<a href="tel:1-407-270-2112">1-407-270-2112</a>';
}
else {
echo '<a href="tel:1-954-753-9436">1-954-753-9436</a>';
}
?>
我不仅会收到错误,而且我的页脚也会消失。有人能告诉我我做错了吗?
提前致谢
答案 0 :(得分:0)
我在这里猜测:你在本地尝试这个。因此,您的IP地址为127.0.0.1
。
对于这个IP freegeoip.net - 显然 - 不知道一个城市。您只需查看输出即可看到此信息:https://freegeoip.net/json/127.0.0.1
所以你必须指望$city
只是空的。通过这样做来解决这个问题:
if (!empty($city) AND (strpos($kings_orlando,$city) !== false) AND ($state == "FL")) {
(当然,这也可能发生在“真正的”IP地址上 - freegeoip.net正在使用的GeoLite数据库远未完成,尤其是在城市层面。)
答案 1 :(得分:0)
首先,使用这个freegeoip.net服务是错误的:)(只要你需要的不仅仅是一个国家)。它非常不准确且经常无法使用,但即使是在一个小型创业网站上,也许只是我有很多问题。
其次 - 使用$city = print_r($data['city'], true);
是错误的。
即使是这样,你也应该$city = $data['city'];
。
你得到的那些警告意味着$city
变量是空的,这是非常可能的(参见:我的答案的第1点;)。尝试其他地理定位服务或确保处理返回的JSON中未提供city的情况。