天天看點

PHP擷取IP 檔案寫入與行修改

·做了一個投票放在微信訂閱号上,通過cookie來實作禁止刷票,這個真是隻能防君子不能防小人,出現了惡意刷票;是以最後改為用IP來限制;

因為是一個短暫的活動,就把IP的記錄寫入了檔案,沒有再寫入表中;

我的驗證規則是:同個ID 對應的同一個IP3分鐘内隻能投一票;

代碼寫的不是很好,急着上交 ,先看着吧 ,以後再完善

function GetIP() {
    if ($_SERVER["HTTP_X_FORWARDED_FOR"])
        $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
    else if ($_SERVER["HTTP_CLIENT_IP"])
        $ip = $_SERVER["HTTP_CLIENT_IP"];
    else if ($_SERVER["REMOTE_ADDR"])
        $ip = $_SERVER["REMOTE_ADDR"];
    else if (getenv("HTTP_X_FORWARDED_FOR"))
        $ip = getenv("HTTP_X_FORWARDED_FOR");
    else if (getenv("HTTP_CLIENT_IP"))
        $ip = getenv("HTTP_CLIENT_IP");
    else if (getenv("REMOTE_ADDR"))
        $ip = getenv("REMOTE_ADDR");
    else
        $ip = "Unknown";
    return $ip;
}
$iptxt = fopen("./data/lovewall.txt", "a+");
	$ip = GetIP();
	$ifok = $i = 1;
	while (!feof($iptxt)) { 
		$now = fgets($iptxt);//擷取周遊行的内容
		if(!empty($now)){
			$now_arr = explode('#',$now);
			if($now_arr[1]==$ip&&$now_arr[2]==$_G['gp_show']."\n"){
				$ifok = 0;
				if($now_arr['0']+180>time()){
					$return = array('status'=>0,'err_msg'=>'一封情書三分鐘内隻限贈送一次哦');
					echo json_encode($return);
					exit;
				}else{
					$all = file_get_contents('./data/lovewall.txt');
					$new = time().'#'.$ip.'#'.$_G['gp_show']."\n";
					$update_str = str_replace($now,$new, $all);//替換 間接實作修改
					file_put_contents('./data/lovewall.txt', $update_str);
				}
			}
		}
		$i++; 
	}
	if($ifok){
		$now = time()."#".$ip."#".$_G['gp_show'];
		fwrite($iptxt,$now."\n");
	}
	fclose($iptxt);