Yii2获取正确的客户端IP

时间:2018-11-15 18:18:04

标签: yii2 ip-address

我使用此功能获取客户端IP:

 $client  = @$_SERVER['HTTP_CLIENT_IP'];

您可以在这里看到它。 http://city.ru.xsph.ru/web/

但是该地址与使用其他主机的IP(正确的IP)不匹配。例如: https://hidemyna.me/en/ip/

3 个答案:

答案 0 :(得分:2)

您可以使用YI2

中提供的Yii2默认方法。
Yii::$app->getRequest()->getUserIP()

或者如果您希望将当前用户ip保存到数据库表中,我建议您在

之类的模型中使用IPbehavior
public function behaviors() {
        return [
            ...
            'ip' => [
                'class' => IpBehavior::className(),
                'attributes' => [
                    ActiveRecord::EVENT_BEFORE_INSERT => ['created_ip', 'updated_ip'],
                    ActiveRecord::EVENT_BEFORE_UPDATE => 'updated_ip',
                ],
            ]
            ...
        ];
    }

或者这样。值可以是字符串,也可以是将返回字符串的匿名函数。

public function behaviors() {
    return [
        ...
        'ip' => [
            'class' => IpBehavior::className(),
            'createdIpAttribute' => 'created_ip',
            'updatedIpAttribute' => 'updated_ip',
            'value' => '127.0.0.1',
        ]
        ...
    ];
}

答案 1 :(得分:0)

我认为要获取客户端IP地址,您必须使用以下代码:

 Yii::$app->request->userIP

答案 2 :(得分:0)

获取客户端IP的首选方法是使用Yii::$app->request-remoteIp
此方法使用$_SERVER['REMOTE_ADDR']或ip标头(例如 X-Forwarded-For ),这些标头可以由负载平衡器或代理服务添加。

在某些情况下,您的公共IP(https://hidemyna.me/en/ip/)和您的应用所显示的IP(http://city.ru.xsph.ru/web/)可能会有所不同-如果您与应用位于同一网络,例子