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

Cakephp返回主机Ip而不是客户端,cakephp,Cakephp,我已经将我的项目上传到我的服务器上,当我调试时,我意识到系统返回的是主机的IP而不是客户端的IP。如果使用CakePHP($this->request->clientIp)或本机PHP代码完成,则没有区别。我从项目中提取了这个代码片段,并在一个PHP文件中对其进行了测试,结果很好 有人知道如何让CkaePHP返回客户端IP吗?我使用的是CakePHP2.1 滚动的是: -Cakephp返回主机IP,我可以使用$this->request->clienteIp()或使用$\u服务器['REMOTE

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

有人知道如何让CkaePHP返回客户端IP吗?我使用的是
CakePHP2.1

滚动的是: -Cakephp返回主机IP,我可以使用
$this->request->clienteIp()
或使用
$\u服务器['REMOTE\u ADDR']
规划php。 -它们都返回托管我的项目的服务器的Ip。 -我用
$\u SERVER['REMOTE\u ADDR']
方法测试了其他项目(没有cakephp框架),效果很好。 -我需要客户端,用户的IP(使用CAKEPHP的框架)。

< P>源:作为一个参与者-如果你投票赞成,请考虑投票赞成/< CakePHP 1.x

因此,为了澄清:

public $components = array(
    'RequestHandler'
);
然后在控制器方法中:

$this->RequestHandler->getClientIp();
CakePHP 2.x

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



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

在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;
}
我自己解决了。 调试返回了带有用户IP的
$\u服务器['HTTP\u X\u REAL\u IP']
。 当我意识到我找到了这个网站:

如果它没有使用普通的PHP方式返回,那么当然,Cake将是错误的,因为它使用PHP来返回。听起来像是服务器配置错误。你的意思是这可能是路由问题吗?不,可能与路由无关。如果PHP没有正确填充它,那就是PHP或web服务器配置问题。但是cakephp之外的文件返回正确的访问者Ip。$\u服务器['REMOTE\u ADDR']在cakephp之外工作。框架内部正在返回我的服务器的Ip。那么,当您转储
$\u服务器时,它是错误的吗?这很奇怪,我从来没有见过蛋糕覆盖环境变量。听起来像是一个代理。如果能在Cake的ticket tracker上打开这个,并提供一个补丁,让其他用户从您的调试中获益,那该多好:)谢谢您的提示,我做到了:
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;
}