尝试应用地理位置时出现PHP错误

时间:2014-09-17 20:40:50

标签: php wordpress

我正在尝试进行一些地理定位,以便在我的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>';
    }
?>

我不仅会收到错误,而且我的页脚也会消失。有人能告诉我我做错了吗?

提前致谢

2 个答案:

答案 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)

  1. 首先,使用这个freegeoip.net服务是错误的:)(只要你需要的不仅仅是一个国家)。它非常不准确且经常无法使用,但即使是在一个小型创业网站上,也许只是我有很多问题。

  2. 其次 - 使用$city = print_r($data['city'], true);是错误的。

    即使是这样,你也应该$city = $data['city'];

  3. 你得到的那些警告意味着$city变量是空的,这是非常可能的(参见:我的答案的第1点;)。尝试其他地理定位服务或确保处理返回的JSON中未提供city的情况。