1

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

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

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

4

3 回答 3

0

资料来源:https ://stackoverflow.com/a/5675320/1110760 作为对这个问题的回答- 如果您对此表示赞同,请考虑同时支持原始答案

CakePHP 1.x

RequestHandlerComponent::getClientIp();

所以澄清一下:

public $components = array(
    'RequestHandler'
);

然后在控制器方法中:

$this->RequestHandler->getClientIp();

CakePHP 2.x

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

$this->request->clientIp();

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

于 2013-01-28T15:49:08.900 回答
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;
}
于 2013-01-28T17:13:33.033 回答
0

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

于 2013-01-29T00:39:59.493 回答