我已将我的项目上传到我的服务器,当我调试时,我意识到系统正在返回主机的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的框架)。
答案 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/