我正在开发一个php应用程序,我需要检测用户timzone(他们从哪里访问应用程序)。我尝试过使用JavaScript时区检测方法以及如果用户更改了影响我计算的时区或机器时间而面临的问题。
我想避免依赖系统时间。请为此提供任何替代方法的建议。
谢谢。
答案 0 :(得分:2)
在使用IP2Location的DB11数据库之前,我已经完成了这项工作,这将允许您根据其IP地址查找用户时区。他们有一个免费版本,您可以测试,但它不如付费版本准确。您可以从https://lite.ip2location.com/database-ip-country-region-city-latitude-longitude-zipcode-timezone下载它,它包含该页面上的说明,用于根据您使用的数据库类型进行设置。
假设您使用MySQL和PHP,这里有一些示例代码可以帮助您在设置数据库后开始使用。至少,您必须将$ ServerName,$ DbLogin和$ DbPassword变量更改为您自己的设置,以获得与数据库的正确连接:
<?
/* function to convert ip address in x.x.x.x format to integer/long for use with the ip2location database */
function convertIpToLong($ip) {
return sprintf("%u", ip2long($ip));
}
$ServerName = "localhost"; // change to real mysql ip
$DatabaseName = "ip2location";
$DbLogin = "root"; // change to a db user that has read permission to your new database
$DbPassword = "password"; // change to your db user password
$link = mysqli_connect($ServerName, $DbLogin, $DbPassword);
// connect to database
mysqli_select_db($link, $DatabaseName)
or die("Could not select database");
$ipAddress = convertIpToLong('8.8.8.8'); // change to real ip address here
$query = "SELECT * FROM ip2location_db11 WHERE ".$ipAddress." >= ip_from AND ".$ipAddress." <= ip_to;";
// test if the ip address is matched to one in the database
if (mysqli_multi_query($link, $query)) {
$result = mysqli_store_result($link); // found a match
}
else {
die("Query failed : " . mysqli_error($link));
}
$row = mysqli_fetch_array($result); // load results into row variable
mysqli_free_result($result); // clear resultset
// write each column to the screen
foreach ($row as $key => $val) {
echo $key." = ".$val."<br />";
}
?>