以下代码似乎只返回我的IP地址的前两位数字。我怎样才能获得完整的IP地址?
$ip2 = $_SERVER['REMOTE_ADDR'];
编辑:我将它作为varchar(30)latin1_swedish_ci放入MySQL。是否有格式更改将显示完整的IP?
编辑2:也许是我的查询正在改变格式。这是:
$query1 = sprintf("INSERT INTO values VALUES (NULL, 'phoenix', %d, '%s', %d, %d, %d, NULL)", $submissionid, $fullurl, $uid, $ip1, $ip2);
mysql_query($query1) or die(mysql_error());
答案 0 :(得分:4)
绝对没有错
$ip2 = $_SERVER['REMOTE_ADDR'];
你说它似乎只包含前两位数,但我猜你做了这个假设,因为$query1
只包含那个。
问题是您在sprintf()
中使用%d
,它会尝试获取整数值$ip2
。 IP地址不是整数,而是字符串,因此您应该使用%s
。
sprintf("INSERT INTO values VALUES (NULL, 'phoenix', %d, '%s', %d, '%s', '%s', NULL)",
$submissionid, $fullurl, $uid, $ip1, $ip2);
答案 1 :(得分:2)
我同意这个PHP很好。
但是...
在varchar(30)中存储是一个糟糕的想法。您似乎假设您将始终获得IPv4地址。你不会。
举个例子:
2001:470:1f04:日:22cf:30ff:feb0:E22B
这不适合你的领域!
答案 2 :(得分:0)
将%s代替%d将会插入IP地址。