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