【问题标题】:My PHP mailing script is showing "country: unknown"我的 PHP 邮件脚本显示“国家:未知”
【发布时间】:2013-07-28 16:40:41
【问题描述】:

这是代码,在此代码中,国家/地区由 IP 地址执行,当它通过我的电子邮件地址发送邮件时,它会显示“国家:未知”,而它应该发送访问者/发件人的国家/地区名称。

<?php
$fullName=$_REQUEST['fullName'];
$phnNumber=$_REQUEST['phnNumber'];
$enquery=$_REQUEST['enquery'];
$ipaddress = $_SERVER["REMOTE_ADDR"];
$hostname = gethostbyaddr($_SERVER['REMOTE_ADDR']);
$pipaddress = getenv('HTTP_X_FORWARDED_FOR');
function visitor_country()
{
    $client  = @$_SERVER['HTTP_CLIENT_IP'];
    $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
    $remote  = $_SERVER['REMOTE_ADDR'];
    $result  = "Unknown";
    if(filter_var($client, FILTER_VALIDATE_IP))
    {
        $ip = $client;
    }
    elseif(filter_var($forward, FILTER_VALIDATE_IP))
    {
        $ip = $forward;
    }
    else
    {
        $ip = $remote;
    }

    $ip_data = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=".$ip));

    if($ip_data && $ip_data->geoplugin_countryName != null)
    {
        $result = $ip_data->geoplugin_countryName;
    }

    return $result;
}

 $to="matt@mb-adi-drivingschool.co.uk";
   $subject = "Contact Us form Details";
   $message = "\nFull Name : ".$fullName."\n Phone Number:".$phnNumber."\n General Enquiry : ".$enquery."\n IP Address : ".$ipaddress."\n Host name : ".$hostname."\n Proxy IP Address : ".$pipaddress."\n Country : ".visitor_country()." \n ";
   $from="matt@mb-adi-drivingschool.co.uk";
    @mail($to,$subject,$message,"From:$from");
    @header("location:thankyou.php");
?>

【问题讨论】:

    标签: php geolocation country ip-geolocation


    【解决方案1】:
    function visitor_country()
    {
        $client  = @$_SERVER['HTTP_CLIENT_IP'];
        $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
        $remote  = $_SERVER['REMOTE_ADDR'];
        $result  = "Unknown";
        if(filter_var($client, FILTER_VALIDATE_IP))
        {
            $ip = $client;
        }
        elseif(filter_var($forward, FILTER_VALIDATE_IP))
        {
            $ip = $forward;
        }
        else
        {
            $ip = $remote;
        }
    
        $ip_data = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=".$ip));
    
        if($ip_data && $ip_data->geoplugin_countryName != null)
        {
            $result = $ip_data->geoplugin_countryName;
        }
    
        return $result;
    }
    

    您将“未知”作为$result。这里很清楚 or ip_data 没有值,或者 $ip_data-&gt;geoplugin_countryNamenull

    【讨论】:

    • 其实我是 php 新手,你能告诉我一些关于它的细节以及我应该用什么来代替这个,或者在这个脚本中更正
    • @user2625373:让我们var_dump($ip_data) 了解更多信息;而不是粘贴我们的结果
    • @user2625373: 在@json_decode 之后复制echo var_dump($ip_data); 并告诉我输出是什么
    • @user2625373 您是 “php 新手” 并且您正在使用这样的高级脚本?即使是我,也不会使用像你这样的脚本,除非我理解它的每一部分,或者大部分内容。
    • @DonCallisto 我同意你的观点,唐关于 OP 将结果变量声明为未知 ($result = "Unknown";)。不管是不是OP的剧本,“it”就像“Song”、“Remains the Same”一样。 ;-)
    猜你喜欢
    • 2020-08-10
    • 1970-01-01
    • 2014-12-19
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 2011-10-06
    • 2021-05-01
    • 1970-01-01
    相关资源
    最近更新 更多