Cakephp返回主机Ip而不是客户端

时间:2013-01-28 14:48:24

标签: cakephp

我已将我的项目上传到我的服务器,当我调试时,我意识到系统正在返回主机的IP而不是客户端的IP。如果使用CakePHP($this->request->clientIp)或本机PHP代码完成则没有区别。我从项目中提取了片段,并在一个PHP文件中对其进行了测试,并且工作正常。

有人知道如何让CkaePHP返回客户端IP吗?我正在使用CakePHP 2.1

滚动的是:   - Cakephp返回主机IP,我可以使用$this->request->clienteIp();或使用$_SERVER['REMOTE_ADDR']计划php。   - 它们都返回托管我的项目的服务器的IP。   - 我使用方法$_SERVER['REMOTE_ADDR']测试了其他项目(没有cakephp框架)并且工作正常。   - 我需要客户端,用户的IP(使用Cakephp的框架)。

3 个答案:

答案 0 :(得分:0)

来源:https://stackoverflow.com/a/5675320/1110760作为this question的支持者 - 如果你赞成这一点,请考虑同时投票original answer

CakePHP 1.x

RequestHandlerComponent::getClientIp();

所以澄清一下:

public $components = array(
    'RequestHandler'
);

然后在控制器方法中:

$this->RequestHandler->getClientIp();

CakePHP 2.x

RequestHandler::getClientIp()已被弃用;您可以从CakeRequest object获取客户端IP:

$this->request->clientIp();

那么,您确定使用的是方法($this->request->clientIp())而不是变量($this->request->clientIp)吗?就像你在问题中提到的那样?

答案 1 :(得分:0)

在cakephp 2.xx

中试试
$this->request->clientIp();

您可以使用本机PHP服务器变量

$_SERVER['REMOTE_ADDR']

这是我在CakePhP上的应用程序的工作示例

function getIp(){
    if (!empty($_SERVER['HTTP_CLIENT_IP'])){    //check ip from share internet
                $ip = $_SERVER['HTTP_CLIENT_IP'];
            } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){   //to check ip is pass from proxy
                $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
            } else {
                $ip = $_SERVER['REMOTE_ADDR'];
            }
return $ip;
}

答案 2 :(得分:0)

我自己解决了。 调试使用用户ip返回$_SERVER['HTTP_X_REAL_IP']。 当我意识到我找到了这个网站时: http://www.maheshchari.com/real-ip-address/