PHP中客户端IP地址的获取

           初学php,写了一个注册的页面,但注册一直不成功,代码没错也没有错误提示,后来经过排错,发现ip2long($_SERVER['REMOTE_ADDR'])这条语句打印出来为false。再进一步排错发现$_SERVER['REMOTE_ADDR']获取的值为 ::1,ip2long()在转换成整型时转换成了false。这是为什么呢?理论上讲,应该是127.0.0.1才对,为什么这个获取的值变成了ipv6了呢, 上网查了查原因,说是系统的问题(我的是win7,服务器和客户端在同一台电脑上),::1和127.0.0.1是一样的,为了能把数据成功写到数据库中可以手动指定一下IP地址。但是手动指定不就写死了么!!!再次百度,原来是/etc/hosts这个文件的问题(在windows上是C:\Windows\system32\drivers\etc\ hosts),只需要注释掉文件中的 # ::1     localhost  这一行即可解决问题。打开文件发现 # ::1 localhost 已注释 没有解决问题;后来把# 127.0.0.1  localhost 前面的#号去掉,重启Apache服务    再次注册,注册成功!!!     另外hosts这个文件很有用,这里你可以添加自己的条目,例如添加 192.168.0.11     myweb 这样子,在浏览器中原来只能使用192.168.0.11来访问,现在可以使用myweb来进行访问。原理同用127.0.0.1访问和用localhost访问是一样的。

总结如下:

方法一:$rip = ip2long($_SERVER['127.0.0.1']);(手动指定,虽然可以,但局限于本机,适合自己学习,长远来看相当不合适)


方法二:如果不修改/etc/hosts这个文件,可以加个判断:

if ($_SERVER['REMOTE_ADDR']=='::1'){
    $_SERVER['REMOTE_ADDR']='127.0.0.1';
}
$rip = ip2long($_SERVER['REMOTE_ADDR']);

也可以实现功能,但稍显麻烦


方法三:修改/etc/hosts/文件

可以去掉127.0.0.1     localhost   前面的注释#

也可以自己手动在下面添加,修改完后需要重启Apache/Tomcat服务器


你可能感兴趣的:(PHP)