php取得 访问源ip地址

近期log有挂着百度头的访问疯狂get图片,css,js导致服务器负载居高不下 。把一个图片更名后,404也get个没完没了。由于公司网站是经别人的服务器反向代理后的。apache的访问log里只能看到代理服务器的ip.根本无从查看访问的实际ip地址。
于是,查方法。

一,apache 生成日志时的方法,试了不管用,显示两个ip 但都是服务器的。

方法:https://blog.csdn.net/xingnang2008/article/details/84846781
如果实在不行,可以试试,万一行了呢。

二,路由 + 页面 +php +ajax

  1. 把一个图片更名后,在thinkphp 的路由里把图片的访问指向一个写好的方法。
  2. 方法里写php获取真实ip地址的方法。取到后ajax 发到服务器,服务器接收保存。
public function index(){   
  	$ip = $this->get_client_ips();	   
 }
 //取到ip
    function get_client_ips($type=0){
	    $type = $type ? 1 : 0;
	    static $ip = NULL;
	    if ($ip !== NULL)
	        return $ip[$type];
	    if ($_SERVER['HTTP_X_REAL_IP']) {
	        // nginx代理模式下,获取客户端真实IP
	        $ip = $_SERVER['HTTP_X_REAL_IP'];
	    } elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
	        // 客户端的ip
	        $ip = $_SERVER['HTTP_CLIENT_IP'];
	    } elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
	        // 浏览当前页面的用户计算机的网关
	        $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
	        $pos = array_search('unknown', $arr);
	        if (false !== $pos)
	            unset($arr[$pos]);
	        $ip = trim($arr[0]);
	    } elseif (isset($_SERVER['REMOTE_ADDR'])) {
	        $ip = $_SERVER['REMOTE_ADDR']; // 浏览当前页面的用户计算机的ip地址
	    } else {
	        $ip = $_SERVER['REMOTE_ADDR'];
	    }
	    // IP地址合法验证
	    $long = sprintf("%u", ip2long($ip));
	    $ip = $long ? array(
	        $ip,
	        $long
	    ) : array(
	        '0.0.0.0',
	        0
	    );
	    $res_ip = $ip[$type];
	      $this->gets($res_ip);
}
//发送ip
    function gets($ip){
        $curl = curl_init();
        $url="http://www.****.com/portal/test/recives";
        //设置抓取的url
        curl_setopt($curl, CURLOPT_URL, $url);
        //设置头文件的信息作为数据流输出
        curl_setopt($curl, CURLOPT_HEADER, 0);
        //设置获取的信息以文件流的形式返回,而不是直接输出。
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 0);
        //设置post方式提交
        curl_setopt($curl, CURLOPT_POST, 1);
        //设置post数据
        $post_data = array(
            "ip" =>  $ip
        );
        curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
        //执行命令
        $data = curl_exec($curl);
        //关闭URL请求
        curl_close($curl);
        //显示获得的数据
            
    }
  //接收ip  
    public function recives(){        
        $ip = I("post.ip");
        $time = date("Y-m-d H:i:s", time());
        file_put_contents(SITE_PATH."/public/temp/log.txt",$time." : ".$ip, FILE_APPEND);
    }
    

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值