PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例

这篇文章主要介绍了PHP实现获取ip地址的5种方法,以及插入用户登录日志操作,结合实例形式总结分析了php获取访客IP地址的5种常见操作方法,以及将用户登陆信息写入登陆日志数据库相关操作技巧,需要的朋友可以参考下。

本文实例讲述了PHP实现获取ip地址的5种方法,以及插入用户登录日志操作,分享给大家供大家参考,具体如下:

php 获取ip地址的5种方法,插入用户登录日志实例,推荐使用第二种方法

  1. <?php //方法1:
  2. $ip = $_SERVER["REMOTE_ADDR"];
  3. echo $ip;
  4. //方法2:
  5. $ip = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"];
  6. $ip = ($ip) ? $ip : $_SERVER["REMOTE_ADDR"];
  7. echo $ip;
  8. //方法3:
  9. function getRealIp()
  10. {
  11. $ip=false;
  12. if(!emptyempty($_SERVER["HTTP_CLIENT_IP"])){
  13. $ip = $_SERVER["HTTP_CLIENT_IP"];
  14. }
  15. if (!emptyempty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
  16. $ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']);
  17. if ($ip) { array_unshift($ips, $ip); $ip = FALSE; }
  18. for ($i = 0; $i < count($ips); $i++) {
  19. if (!eregi ("^(10│172.16│192.168).", $ips[$i])) {
  20. $ip = $ips[$i];
  21. break;
  22. }
  23. }
  24. }
  25. return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);
  26. }
  27. echo getRealIp();
  28. //方法4:
  29. if ($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"])
  30. {
  31. $ip = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];
  32. }
  33. elseif ($HTTP_SERVER_VARS["HTTP_CLIENT_IP"])
  34. {
  35. $ip = $HTTP_SERVER_VARS["HTTP_CLIENT_IP"];
  36. }
  37. elseif ($HTTP_SERVER_VARS["REMOTE_ADDR"])
  38. {
  39. $ip = $HTTP_SERVER_VARS["REMOTE_ADDR"];
  40. }
  41. elseif (getenv("HTTP_X_FORWARDED_FOR"))
  42. {
  43. $ip = getenv("HTTP_X_FORWARDED_FOR");
  44. }
  45. elseif (getenv("HTTP_CLIENT_IP"))
  46. {
  47. $ip = getenv("HTTP_CLIENT_IP");
  48. }
  49. elseif (getenv("REMOTE_ADDR"))
  50. {
  51. $ip = getenv("REMOTE_ADDR");
  52. }
  53. else
  54. {
  55. $ip = "Unknown";
  56. }
  57. echo $ip ;
  58. //方法5:
  59. if(getenv('HTTP_CLIENT_IP')) {
  60. $onlineip = getenv('HTTP_CLIENT_IP');
  61. } elseif(getenv('HTTP_X_FORWARDED_FOR')) {
  62. $onlineip = getenv('HTTP_X_FORWARDED_FOR');
  63. } elseif(getenv('REMOTE_ADDR')) {
  64. $onlineip = getenv('REMOTE_ADDR');
  65. } else {
  66. $onlineip = $HTTP_SERVER_VARS['REMOTE_ADDR'];
  67. }
  68. echo $onlineip;

实例:在用户登录时获取用户IP,插入到数据库登录日志表里

  1. //增加用户登录日志
  2. $ip = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"];
  3. $ip = ($ip) ? $ip : $_SERVER["REMOTE_ADDR"];
  4. $this->usermodel->addUserlog($userid,$nickname,$ip);
  5. function addUserlog($userid,$nickname,$ip) {
  6. try {
  7. $now = date("Y-m-d H-i-s",time());
  8. $data=array(
  9. 'userid'=>$userid,
  10. 'nickname'=>$nickname,
  11. 'ip'=>$ip,
  12. 'logintime'=>$now
  13. );
  14. $insert_query = $this->db->insert_string('user_log', $data);
  15. $this->db->query($insert_query);
  16. return 0;
  17. } catch ( Exception $e ) {
  18. return -1;
  19. }
  20. }

日志表结构:

  1. CREATE TABLE `user_log` (
  2. `id` bigint(20) NOT NULL AUTO_INCREMENT,
  3. `userid` bigint(20) NOT NULL,
  4. `nickname` varchar(50) NOT NULL,
  5. `ip` varchar(50) NOT NULL,
  6. `logintime` datetime NOT NULL,
  7. PRIMARY KEY (`id`)
  8. ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8