客戶反映有台灣用戶向他問東問西,最後也沒向他購買浪費他的時間,經發現是有台灣的業者盜用他的圖庫進行販售,沒關係就繼續用順便幫我打廣告吧~
首先我們要來確認使用者的資訊,客戶只在中國販售,不希望其他地區使用圖庫,畢竟數據流量不是免費的,我們可以從裝置的語系及IP位置來判斷用戶是哪裡人,將不符合資格的客戶轉址到我的圖庫。
這部分比較簡單,通過內建的指令就可以知道用戶的語言
<?php
$LANGUAGE = strtok($_SERVER['HTTP_ACCEPT_LANGUAGE'], ',');
echo $LANGUAGE; //繁體中文為"zh-TW",簡體中文為"zh-c"
?>
這部分比較複雜我們找到IP位置後須使用API來判定國籍,所以分成兩個檔案。
首先創建Request.php並在其寫入會用到的方法,取得IP和、取得國籍,在到主程式中呼叫使用,就不會這麼混亂。
//Request.php
<?php
class Request
{
public function getIpAddress()
{
$ipAddress = '';
if (! empty($_SERVER['HTTP_CLIENT_IP']) && $this->isValidIpAddress($_SERVER['HTTP_CLIENT_IP'])) {
// check for shared ISP IP
$ipAddress = $_SERVER['HTTP_CLIENT_IP'];
} else if (! empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
// check for IPs passing through proxy servers
// check if multiple IP addresses are set and take the first one
$ipAddressList = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
foreach ($ipAddressList as $ip) {
if ($this->isValidIpAddress($ip)) {
$ipAddress = $ip;
break;
}
}
} else if (! empty($_SERVER['HTTP_X_FORWARDED']) && $this->isValidIpAddress($_SERVER['HTTP_X_FORWARDED'])) {
$ipAddress = $_SERVER['HTTP_X_FORWARDED'];
} else if (! empty($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']) && $this->isValidIpAddress($_SERVER['HTTP_X_CLUSTER_CLIENT_IP'])) {
$ipAddress = $_SERVER['HTTP_X_CLUSTER_CLIENT_IP'];
} else if (! empty($_SERVER['HTTP_FORWARDED_FOR']) && $this->isValidIpAddress($_SERVER['HTTP_FORWARDED_FOR'])) {
$ipAddress = $_SERVER['HTTP_FORWARDED_FOR'];
} else if (! empty($_SERVER['HTTP_FORWARDED']) && $this->isValidIpAddress($_SERVER['HTTP_FORWARDED'])) {
$ipAddress = $_SERVER['HTTP_FORWARDED'];
} else if (! empty($_SERVER['REMOTE_ADDR']) && $this->isValidIpAddress($_SERVER['REMOTE_ADDR'])) {
$ipAddress = $_SERVER['REMOTE_ADDR'];
}
return $ipAddress;
}
public function isValidIpAddress($ip)
{
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) === false) {
return false;
}
return true;
}
public function getLocation($ip)
{
$ch = curl_init('http://ipwhois.app/json/' . $ip);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$json = curl_exec($ch);
curl_close($ch);
// Decode JSON response
$ipWhoIsResponse = json_decode($json, true);
// Country code output, field "country_code"
return $ipWhoIsResponse;
}
}
主程式的部分,直接呼叫,就不用每次判定都寫長長的一串程式碼
require_once 'Request.php'; //讀取之前的檔案
$requestModel = new Request();
$ip = $requestModel->getIpAddress(); //取的IP
$isValidIpAddress = $requestModel->isValidIpAddress($ip); //透過IP取得用戶資料
$jdata = json_encode($requestModel->getLocation($ip)); //將資料進行轉換
$country = json_decode($jdata, true)["country"];
echo $country; //中國為"China",香港"Hong Kong",台灣"Taiwan"
其實$jdata
中有許多數據,這邊為了方便只取用 country
若需要都可再調用。
{"ip":"207.46.13.113","success":true,"type":"IPv4","continent":"North America","continent_code":"NA","country":"United States","country_code":"US","country_flag":"https:\/\/cdn.ipwhois.io\/flags\/us.svg","country_capital":"Washington D.C.","country_phone":"+1","country_neighbours":"CA,MX","region":"Massachusetts","city":"Quincy","latitude":42.25287720000000035724951885640621185302734375,"longitude":-71.0022704999999945130184642039239406585693359375,"asn":"AS8075","org":"Microsoft Corporation","isp":"Microsoft Corporation","timezone":"America\/New_York","timezone_name":"EDT","timezone_dstOffset":3600,"timezone_gmtOffset":-14400,"timezone_gmt":"-04:00","currency":"US Dollar","currency_code":"USD","currency_symbol":"$","currency_rates":1,"currency_plural":"US dollars"}
上面的方法可以知道使用者的語系及國家,盜用者在台灣、客戶只在中國販賣,所以只要語系為台灣或者國家不在中國或香港,只要成立其中一個條件就轉址到我的圖庫。
<?php
echo "<script> alert('即將轉址到Google');parent.location.href='https://www.google.com/'; </script>";
//
?>
Learn More →
呈現效果會向上圖,可簡短描述文字,當用戶點選確認後就會跳到Google搜尋畫面
Cookie是好吃的餅乾,我們常用的網頁是很多個檔案組成的,Cookie的可以在網頁中暫時儲存資料,
舉例:我們只需要登入一次蝦皮帳號,網頁就會記住我們的帳號資料,不需要切換個頁面就重新登入。
<?php
//建立cookie變數test,數值為123,存活時間30秒
setcookie( "test", "123", time()+30);
//讀取cookie,這邊會印出123
echo $_COOKIE["test"];
//刪除cookie,將數值改為空或存活時間砍光都可移除cookie
setcookie( "test", "", time()-30);
?>
一般Cookie只能存在同域中,只要頁面有跳動Cookie就會消失,我有多個圖庫希望都可以記住,這時候就需要建立跨域Cookie,不過在這之前先介紹一下網域。
www.google.com 是我們常用的搜尋引擎
mail.google.com 為Google的信箱
translate.google.com 為Google翻譯的網址
我們會發現Google旗下的服務,除了Youtube是後來併購的外,其他均為google.com結尾,而www為主網域、mail和translate就是子網域,一般的Cookie無法再子網域間通用,所以我們要建立跨域的Cookie,這樣只要在旗下的網頁都可讀取到,但這邊有個限制,主網域必須相同。
<?php
//建立cookie變數msg,數值:true,時間:300秒,路徑:"/"為不限制,使用範圍:輸入主網域子網域也讀取的到
setcookie("msg",true,time()+300,"/","nephidog.com");
//讀取cookie,這邊會印出true
echo $_COOKIE["test"];
//刪除cookie,將數值改為空或存活時間砍光都可移除cookie
setcookie("msg","",time()-99999,"/","nephidog.com");
?>
剩下就是把上述的資料整合再一起,這也是寫程式最有趣的地方,將不符合的人導入到我的網站,我也有被盜圖的風險,所以這邊使用全域cookie,每五分鐘就宣告一次訊息,我們只需要將程式碼加入到入口網站也就是index.php就可以正常起作用拉。
首先是客戶的位置,加入轉址功能,跳轉到我的圖庫
require_once 'Request.php';
$requestModel = new Request();
$ip = $requestModel->getIpAddress();
$isValidIpAddress = $requestModel->isValidIpAddress($ip);
$jdata = json_encode($requestModel->getLocation($ip));
$country = json_decode($jdata, true)["country"];
if(strtok($_SERVER['HTTP_ACCEPT_LANGUAGE'], ',')=='zh-TW' or !in_array($country, array("China","Hong Kong"))){
setcookie("msg",true,time()+300,"/","nephidog.com");
echo "<script> alert('近期有不良商家用本站縮圖製作劣質抱枕,♚尼腓工作室僅在蝦皮販售無任何分店,其餘管道購入無法保證其品質,請各位貴客知悉~!!!');parent.location.href='圖庫網址是秘密'; </script>";
}
再來是我自己圖庫的部分,只要讀取不到cookie,就會在跳一次宣告。
if ($_COOKIE['msg']==null){
setcookie("msg",true,time()+300,"/","nephidog.com");
echo "<script> alert('近期有不良商家用本站縮圖製作劣質抱枕,♚尼腓工作室僅在蝦皮販售無任何分店,其餘管道購入無法保證其品質,請各位貴客知悉~!!!'); </script>";
}
如果喜歡一件商品,建議還是向原作者購買,你們的支持是原作者的肯定,發展,仿品雖然價格便宜,材質用料以都無法與原品相比較,有很大的可能採雷。
尼腓工作室在繪圖、用料及印刷工藝上皆有嚴格把關,♚尼腓工作室 僅蝦皮一間店鋪無任何分店,其餘皆為復刻盜圖無法保證其品質,請各位主人們知悉~!!!
尼腓家 : 原創商品皆由專業繪師獨立繪製,原始檔案直接印刷,完美呈現細節。
盜圖仔 : 由縮圖放大,即使架構相似細節容易失真,可能有馬賽克的現象發生。
尼腓家: 採用六色印刷,在色彩呈現上更加細緻接近原圖,可加價升級Hi-Fi 八色印刷。
仿間: 四色印刷,如遇敏感色時無法完美呈現,容易有跑色的問題。
可參照圖檔詳細介紹,在用料上絕不馬虎,給您最好的體驗。
Learn More →
▼保證金賣家安心可靠
主要業務 :
優惠專區 :
代儲系列商品可轉帳付款,免去平台抽成享優惠價格,可至下方聯絡方式詢問。
聯絡方式
簡介 基於每月都要填寫相同問卷,究竟是否可以利用程式來完成呢?就讓我們來一探究竟吧~! 有任何建議可在下方留言給建議歐~ {%hackmd ajQJQroLSRKg7mugHyYLUw %} 免責申明 本文並非教學文章,只附上片段程式碼說明構思,僅做學術研究,無破壞問卷可靠性之意,若有違反請告知,將盡速移除。 什麼是爬蟲 ?
Apr 11, 2022黑潮:深海覺醒 智能輔助 限時試用中 ⚠ ⚠ ⚠ 注意事項 ⚠ ⚠ ⚠ 本輔助由 Nephi 編寫,請勿擅自轉載、販售 ,有任何問題、建議請至 Discord 詢問管理員。 本輔助模擬人為操作,雖無修改遊戲數據但仍屬於第三方程式,使用可能造成帳號封鎖,請自行評估後再使用,被鎖一律不負責。 Discord 有販售點卡,可向 最高管理員詢問購買,Mycard、GASH 95折起 量大另有折扣。 < 影片展示 >
Apr 2, 2021前言 繼上篇文章♚尼腓工作室♚ 利用Google Apps Script(GAS) 整理雲端硬碟資料到Excel,寫好的腳本已經能自動整理雲端硬碟的資料並輸出到Excel表單中,但隨著資料量的增加,有時就會出現逾時無法將指令跑完的問題。 因為GAS避免濫用對腳本有限制,而我遇到時間限制如下圖,詳細的限制條件可參考 : 這裡。 可以看得出來Google對於教育非常的重視,提供學生與企業相同的配額,但30分鐘還沒跑完....就代表需要優化程式了~ 程式碼與流程圖 先來回顧一下我們的程式碼與流程圖。
Oct 12, 2020or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up