getUserIP() public static method

获取客户端IP地址
public static getUserIP ( ) : string
return string
コード例 #1
0
ファイル: Api.php プロジェクト: sendya/shadowsocks-panel
 /**
  * 查询 IP 详细信息
  *
  * @JSON
  */
 public function queryCountry()
 {
     $ipAddress = Utils::getUserIP();
     $ch = curl_init();
     $url = 'http://ip.taobao.com/service/getIpInfo.php?ip=' . $ipAddress;
     // 执行HTTP请求
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
     curl_setopt($ch, CURLOPT_URL, $url);
     $res = curl_exec($ch);
     echo $res;
     exit;
 }
コード例 #2
0
ファイル: Member.php プロジェクト: sendya/shadowsocks-panel
 /**
  * 主页面 仪表盘
  */
 public function index()
 {
     $user = User::getUserByUserId(User::getCurrent()->uid);
     $data['user'] = $user;
     $data['online'] = Stats::countOnline();
     $data['userCount'] = Stats::countUser();
     $data['useUserCount'] = Stats::countUseUser();
     // 使用过服务的用户数
     $data['checkCount'] = Stats::countSignUser();
     $data['onlineNum'] = 0.0;
     // default online number.
     if ($data['online'] !== 0 && $data['userCount'] !== 0) {
         $data['onlineNum'] = round($data['online'] / $data['userCount'], 2) * 100;
     }
     $data['allTransfer'] = Utils::flowAutoShow($user->transfer);
     $data['useTransfer'] = $user->flow_up + $user->flow_down;
     // round(() / Utils::mb(), 2);
     $data['slaTransfer'] = Utils::flowAutoShow($user->transfer - $data['useTransfer']);
     $data['pctTransfer'] = 0.0;
     if (is_numeric($data['useTransfer']) && $data['useTransfer'] > 0 && is_numeric($user->transfer) && $user->transfer > 0) {
         $data['pctTransfer'] = round($data['useTransfer'] / $user->transfer, 2) * 100;
     }
     $data['useTransfer'] = Utils::flowAutoShow($data['useTransfer'], 1);
     $tmp = explode(" ", $data['useTransfer']);
     $data['useTransfer'] = $tmp[0];
     $data['useTransferUnit'] = count($tmp) > 1 ? $tmp[1] : 'KB';
     $data['systemTransfer'] = round(Stats::countTransfer() / Utils::gb(), 2);
     // 全部用户产生的流量
     $data['checkedTime'] = date('m-d H:i', $user->lastCheckinTime);
     $data['lastOnlineTime'] = date('Y-m-d H:i:s', $user->lastConnTime);
     $data['checked'] = strtotime(date('Y-m-d 00:00:00', time())) > strtotime(date('Y-m-d H:i:s', $user->lastCheckinTime));
     $data['userIp'] = Utils::getUserIP();
     // Message
     $data['globalMessage'] = Message::getGlobalMessage();
     $data['allNode'] = Stats::countNode();
     Template::setContext($data);
     Template::setView('panel/member');
 }
コード例 #3
0
ファイル: Invite.php プロジェクト: sendya/shadowsocks-panel
 /**
  * Add a invite
  * @param $uid
  * @param string $plan
  * @param bool $isTransfer
  * @return bool
  */
 public static function addInvite($uid, $plan = 'A', $isTransfer = false)
 {
     $inviteStr = substr(hash("sha256", $uid . Utils::randomChar(10)), 0, 26) . $uid;
     $obj = new self();
     $obj->inviteIp = Utils::getUserIP();
     $obj->invite = $inviteStr;
     $obj->plan = $plan;
     $obj->uid = $uid;
     if ($isTransfer) {
         $user = User::getUserByUserId($uid);
         $user->transfer = $user->transfer - Utils::GB * 10;
         $user->invite_num = $user->invite_num - 1;
         $user->save();
     }
     $result = $obj->save();
     return $obj;
 }
コード例 #4
0
ファイル: Auth.php プロジェクト: sendya/shadowsocks-panel
 /**
  * @JSON
  */
 public function register()
 {
     $result = array('error' => 1, 'message' => '注册失败');
     $email = strtolower(trim($_POST['r_email']));
     $userName = trim($_POST['r_user_name']);
     $passwd = trim($_POST['r_passwd']);
     $repasswd = trim($_POST['r_passwd2']);
     $inviteCode = trim($_POST['r_invite']);
     $invite = Invite::getInviteByInviteCode($inviteCode);
     //校验 invite 是否可用
     if ($invite->status != 0 || $invite == null || empty($invite)) {
         $result['message'] = '邀请码不可用';
     } else {
         if ($repasswd != $passwd) {
             $result['message'] = '两次密码输入不一致';
         } else {
             if (strlen($passwd) < 6) {
                 $result['message'] = '密码太短,至少8字符';
             } else {
                 if ($chkEmail = Utils::mailCheck($email)) {
                     $result['message'] = $chkEmail;
                 } else {
                     $user = new User();
                     $user->email = $email;
                     if ($userName == null) {
                         $userName = $email;
                     }
                     $userCount = Stats::countUser();
                     $user->nickname = $userName;
                     // LEVEL 从数据库中获取
                     $custom_transfer_level = json_decode(Option::get('custom_transfer_level'), true);
                     // 定义邀请码套餐与流量单位
                     $transferNew = Utils::GB * intval($custom_transfer_level[$invite->plan]);
                     $user->transfer = $transferNew;
                     $user->invite = $inviteCode;
                     $user->plan = $invite->plan;
                     // 将邀请码的账户类型设定到注册用户上.
                     $user->regDateLine = time();
                     $user->lastConnTime = $user->regDateLine;
                     $user->sspwd = Utils::randomChar();
                     $user->payTime = time();
                     // 注册时支付时间
                     $user_test_day = Option::get('user_test_day') ?: 7;
                     $user->expireTime = time() + 3600 * 24 * intval($user_test_day);
                     // 到期时间
                     $mailVerify = Option::get('mail_verify');
                     // 邮件验证是否开启
                     if ($userCount > 0 && $mailVerify) {
                         $user->enable = 0;
                         // 停止账户
                         $code = Utils::randomChar(10);
                         $forgePwdCode['verification'] = $code;
                         $forgePwdCode['time'] = time();
                         $user->forgePwdCode = json_encode($forgePwdCode);
                         $mailer = Mailer::getInstance();
                         $mailer->toQueue(false);
                         $mail = new Mail();
                         $mail->to = $user->email;
                         $mail->subject = '[' . SITE_NAME . '] 新账户注册邮箱校验';
                         $mail->content = Option::get('custom_mail_verification_content');
                         $params = ['code' => $code, 'nickname' => $user->nickname, 'email' => $user->email, 'useTraffic' => Utils::flowAutoShow($user->flow_up + $user->flow_down), 'transfer' => Utils::flowAutoShow($user->transfer), 'expireTime' => date('Y-m-d H:i:s', $user->expireTime), 'REGISTER_URL' => base64_encode($user->email . "\t" . $forgePwdCode['verification'] . "\t" . $forgePwdCode['time'])];
                         $mail->content = Utils::placeholderReplace($mail->content, $params);
                         $mailer->send($mail);
                     } else {
                         $user->enable = 1;
                         // 第一个账户,默认设定为启用
                         $user->forgePwdCode = null;
                     }
                     $user->port = Utils::getNewPort();
                     // 端口号
                     $user->setPassword($passwd);
                     $user->save();
                     $invite->reguid = $user->uid;
                     $invite->regDateLine = $user->regDateLine;
                     $invite->status = 1;
                     // -1过期 0-未使用 1-已用
                     $invite->inviteIp = Utils::getUserIP();
                     $invite->save();
                     if (null != $user->uid && 0 != $user->uid) {
                         $result['error'] = 0;
                         $result['message'] = '注册成功';
                     }
                     if ($mailVerify) {
                         $result['message'] .= ',您需要验证邮箱后才能使用本站功能。';
                     }
                     Logger::getInstance()->info('user [' . $user->email . '] register success');
                 }
             }
         }
     }
     return $result;
 }