2

ユーザーが米国にいる場合、PHP を使用して、PHP の特定の行のみを実行することが可能かどうか疑問に思っています。100 ドルを超える米国の注文に対して送料無料のグラフィックを含めたいのですが、ユーザーがカナダ人である場合は表示されないようにしたいと考えています。

これが私が取り組んでいるものです。

  <?php
            if ($_product->getPrice() > 100)
{
echo '<span class="shippinginfo">Free Shipping</span>';
}    
else
{
    echo '<span class="shippinginfo">Flat Rate $5.95</span>';
}
?>
4

3 に答える 3

1

これを行うには 2 つの方法があります。1. クライアント IP を使用して場所をフィルタリングします。

$deny = array("111.111.111", "222.222.222", "333.333.333");
if (in_array ($_SERVER['REMOTE_ADDR'], $deny)) {

クライアントが VPN またはプロキシ サーバーを使用してアプリケーションにアクセスしている場合、これは失敗します。

  1. Java スクリプトを使用してクライアントの場所を見つけ、緯度と経度の値をサーバーに渡します。PHP を使用して、クライアントの地理的位置を見つけます。

クライアント ブラウザが有効になっていないか、位置情報を許可していない場合、これは失敗します。

function getLocation()
  {
  if (navigator.geolocation)
    {
    navigator.geolocation.getCurrentPosition(showPosition);
    }
  else{x.innerHTML="Geolocation is not supported by this browser.";}
  }
function showPosition(position)
  {
  x.innerHTML="Latitude: " + position.coords.latitude + 
  "<br>Longitude: " + position.coords.longitude; 
  }
于 2013-09-20T14:37:45.593 に答える
0

世界中のすべての ISP のデータベース (数千の IP を含む) を用意するか、 http://ipinfodb.com/ip_location_api.phpなどの API を使用する必要があります。

また、Web プロキシ、HTTP プロキシ、または VPN を使用して、IP を偽造するのは非常に簡単です。IPだけを信頼することはできません。

コード部分については、ドキュメントを読み、国 ( $country) を取得したら、次のようにします (正しく理解している場合)。

<?php  
// ...
if($country != 'us') {
    if($_product->getPrice() > 100) {
        echo '<span class="shippinginfo">Free Shipping</span>';
    } else {
        echo '<span class="shippinginfo">Flat Rate $5.95</span>';
    }
}
// ..
?>

API を使用することをお勧めしますが、挑戦したい場合 (または本当にトラフィックが多い場合) は、ここからデータベースなどをダウンロードして、IP から国への変換を自分で行うことができます。また、ユーザーが米国の IP を持っているように見えても、そのユーザーが米国出身であることを 100% 確信できるわけではないことを忘れないでください。

于 2013-09-20T14:31:39.567 に答える
0

GeoIP データベースが必要です。それらのスタック全体が利用可能です-これは私が google から得た結果の1つですが、他にもたくさんあります。最適なものを見つけてください (無料のものもあれば、料金を支払う必要があるものもあります。国のデータだけを持つものもあれば、町のデータを持つものもあります。オンライン API もあれば、ダウンロード可能なデータベースもあり、他のものよりも最新のものもあります。など)。

発生する問題は次のとおりです。

  • データを最新の状態に保つ -- IP アドレスは特定の場所に関連付けられていません。データベースは、各アドレス ブロックの所有権に関するデータと、その所有者 (つまり、ローカル ISP) がそれを使用している場所に関するデータに依存しています。IP アドレスの所有者と場所はかなり頻繁に変更されます。データベースを最新の状態に保っていないと、データベースはすぐに間違った結果を出し始めます。また、最新の DB でさえ間違っている可能性があります。IP の場所は正式に公開されていないため、データベースの管理者は手動で変更を監視する必要があります。彼らがいくつかを見逃すことは珍しくありません。

  • ユーザーが VPN 経由で接続したり、プロキシ サーバーを使用したりすると、正しくない結果が得られます。これについてあなたができることは何もありません: IP アドレスが別の場所にあるように見えても、ある場所にいる可能性があることを受け入れる必要があります。

上記からのメッセージは、できるということですが、正しいことを保証するものではありませ

したがって、ユーザーにそれを回避し、国を手動で指定する方法を提供する必要があります。

于 2013-09-20T14:33:58.817 に答える