RWD風行,所以網站的前端要考慮的層面就多了很多,前端目前缺乏所以得自己來,浮動式固定選單挺常用到,備忘囉!!
CSS
<style>
.navFixed {
z-index: 10;
position: fixed;
top: 0;
left: 0;
margin-top: 0;
min-width: 100%;
opacity: 0.94;
transition: opacity .5s ease-out;
}
</style>
JS
<script type="text/javascript">
$(function() {
$(window).scroll(function() {
if ($(this).scrollTop() > 495) { /* 要滑動到選單的距離 */
$('.dropdowns').addClass('navFixed'); /* 幫選單加上固定效果 */
} else {
$('.dropdowns').removeClass('navFixed'); /* 移除選單固定效果 */
}
});
});
</script>
HTML
<div class="navFixed" ></div>
參考來源: https://edwardzou.blogspot.com/2017/09/fixMenu.html
2019年9月11日 星期三
透過gsutil進行 GCP Storage 至 AWS S3 操作
參考步驟:http://proanalyst.net/migrate-files-gcs-into-amazon-s3/
1. 建立一個VM並啟用SSH
2. 透過SSH連限制這個VM Instace
3. 寫入.boto
echo [Credentials] >> ~/.boto
echo aws_access_key_id = XXX >> ~/.boto
echo aws_secret_access_key = OOOOO >> ~/.boto
4. gsutil 指令
資料夾搬移
gsutil cp -r gs://BucketName/FolderName/ s3://BucketName/FolderName/
特定檔案類型搬移
gsutil cp *.jpg gs://BucketName/FolderName/ s3://BucketName/FolderName/
1. 建立一個VM並啟用SSH
2. 透過SSH連限制這個VM Instace
3. 寫入.boto
echo [Credentials] >> ~/.boto
echo aws_access_key_id = XXX >> ~/.boto
echo aws_secret_access_key = OOOOO >> ~/.boto
4. gsutil 指令
資料夾搬移
gsutil cp -r gs://BucketName/FolderName/ s3://BucketName/FolderName/
特定檔案類型搬移
gsutil cp *.jpg gs://BucketName/FolderName/ s3://BucketName/FolderName/
2019年8月23日 星期五
PHP import reCAPTCHA v3
早上得到反映Google reCAPTCHA循環出現輸入錯誤無法通過的消息,檢查中發現已經更新到 v3,他跟前代最大的差別就是不用再要求使用者與頁面互動,貌似會依照行為來計算分數判斷是否為機器人所為!!
套用步驟如下。
1. 申請KEY,進入此網站點選右上角進入Admin Console,依照步驟取得網站金鑰跟密鑰
2. 登入頁(HTML)
HEAD:
<script src="https://www.google.com/recaptcha/api.js?render=網站金錀"> </script>
<script>
grecaptcha.ready(function() {
grecaptcha.execute('網站金錀', {action: 'homepage'}).then(function(token) {
var recaptchaResponse = document.getElementById('recaptchaResponse');
recaptchaResponse.value = token;
});
});
</script>
FORM:
<input type="hidden" value="" name="recaptcha_response" id="recaptchaResponse">
3. 驗證頁(PHP)
if ( !$_POST ) exit;
$recaptcha_url = 'https://www.google.com/recaptcha/api/siteverify';
$recaptcha_secret = '密鑰';
$recaptcha_response = $_POST['recaptcha_response'];
//Make and decode POST request:
$recaptcha = file_get_contents($recaptcha_url . '?secret=' . $recaptcha_secret . '&response=' . $recaptcha_response);
$recaptcha = json_decode($recaptcha);
if($recaptcha->success==true){
if($recaptcha->score >= 0.5) {
//PASS
} else {
//BOT
}
} else {
//FAIL
}
4. 檢查~套用v3的頁面右下角會出現Google reCAPTCHA圖示,若無則表示有缺漏得檢查。
套用步驟如下。
1. 申請KEY,進入此網站點選右上角進入Admin Console,依照步驟取得網站金鑰跟密鑰
2. 登入頁(HTML)
HEAD:
<script src="https://www.google.com/recaptcha/api.js?render=網站金錀"> </script>
<script>
grecaptcha.ready(function() {
grecaptcha.execute('網站金錀', {action: 'homepage'}).then(function(token) {
var recaptchaResponse = document.getElementById('recaptchaResponse');
recaptchaResponse.value = token;
});
});
</script>
FORM:
<input type="hidden" value="" name="recaptcha_response" id="recaptchaResponse">
3. 驗證頁(PHP)
if ( !$_POST ) exit;
$recaptcha_url = 'https://www.google.com/recaptcha/api/siteverify';
$recaptcha_secret = '密鑰';
$recaptcha_response = $_POST['recaptcha_response'];
//Make and decode POST request:
$recaptcha = file_get_contents($recaptcha_url . '?secret=' . $recaptcha_secret . '&response=' . $recaptcha_response);
$recaptcha = json_decode($recaptcha);
if($recaptcha->success==true){
if($recaptcha->score >= 0.5) {
//PASS
} else {
//BOT
}
} else {
//FAIL
}
4. 檢查~套用v3的頁面右下角會出現Google reCAPTCHA圖示,若無則表示有缺漏得檢查。
2019年8月2日 星期五
大量Time_wait的改善紀錄
因為AP架構設計的緣故,做了個Agent處理在Listen伺服器上檢查是否有需要處理的作業,頻繁的連線>檢查>關閉的作業,在客戶端Agent多的狀況下在伺服器端就會發現有許多Time_wait紀錄,這樣會造成WEB服務上的效能變差。
編輯 vim /etc/sysctl.conf
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
然後執行 /sbin/sysctl -p 套用
編輯 vim /etc/sysctl.conf
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
然後執行 /sbin/sysctl -p 套用
- net.ipv4.tcp_syncookies = 1 表示開啟SYN Cookies。當出現SYN等待隊列溢出時,啟用cookies來處理,可防範少量SYN攻擊,默認為0,表示關閉;
- net.ipv4.tcp_tw_reuse = 1 表示開啟重用。允許將TIME-WAIT sockets重新用於新的TCP連接,默認為0,表示關閉;
- net.ipv4.tcp_tw_recycle = 1 表示開啟TCP連接中TIME-WAIT sockets的快速回收,默認為0,表示關閉。
- net.ipv4.tcp_fin_timeout 修改系統默認的 TIMEOUT 時間
若是卡點在對資料庫的連線,那麼寫個shell script來kill process才能改善,單純結束連線解決不了問題。
define('MAX_SLEEP_TIME', 120);
$hostname = "xxx";
$username = "xxx";
$password = "xxx";
$err_level = error_reporting(0);
$connect = mysql_connect($hostname,$username,$password);
error_reporting($err_level);
$result = mysql_query("SHOW PROCESSLIST", $connect);
while ($proc = mysql_fetch_assoc($result)) {
if ($proc["Command"] == "Sleep" && $proc["Time"] > MAX_SLEEP_TIME) {
@mysql_query("KILL " . $proc["Id"], $connect);
}
}
mysql_close($connect);
2019年8月1日 星期四
aliyun push to android 8 up 備忘
相關資源:
https://github.com/aliyun/alicloud-ams-demo/tree/master/OpenApi2.0/push-openapi-php-demo
這陣子在處理阿里推送上在Android 8裝置會收不到的狀態卡了許久,使用PushNoticeToAndroidRequest.php來進行推送都很迅速地在Android 8以下裝置收到,若是透過阿里後台的推送則全裝置都能順利收到,這就不會是APP設計的問題。
這部分問題要爬文建議透過百度搜尋來查找,比Google來的更豐富且針對些,應該是阿里雲屬於內地的產品吧! 即便在那斯達克上市也不能免俗。
總之關鍵點在於...以下參考~
//XXX必須與APP設定的一致
$request_android->setAndroidNotificationChannel("XXX");
ExtParameters設定:
//這是透過 PushNoticeToAndroidRequest.php 使用的設定
$request->setAndroidExtParameters("{\"key1\":\"value1\",\"api_name\":\"PushNoticeToAndroidRequest\"}");
//這是透過 PushRequest.php 使用的設定
$request->setAndroidExtParameters("{\"k1\":\"android\",\"k2\":\"v2\"}");
//若設定成ALL則IOS相關設定需帶入
$request->setDeviceType("ANDROID");
//這設定貌似也要加~不過數字上沒甚麼感覺
$request->setAndroidNotificationBarType(1); //通知栏自定义样式0-100
$request->setAndroidNotificationBarPriority(1); //通知栏自定义样式0-100
小結: 許多阿里後台端的問題都需有內地帳號才能發問(這個在台灣手機認證上就掛了),所以即便是呼叫OPENAPI順利得到MessageID對於"沒收到"這檔是也是無濟於事,打轉許久只能透過Try & Error排除。
另外曾考慮透過Dot NET來呼叫OPENAPI,不過在帶入appkey那行總是編譯失敗,nullable long<n> 未定義,改用建議的DLL會造成更多的變數定義錯誤,這是就神奇了~~目前無解。
補充:使用PushNoticeToAndroidRequest設定NotificationChannel沒意義,追蹤相關的code看來沒支援/強制寫入固定值在回傳的陣列裡也是靜悄悄,所以用PushRequest.php來推送即可。
https://github.com/aliyun/alicloud-ams-demo/tree/master/OpenApi2.0/push-openapi-php-demo
這陣子在處理阿里推送上在Android 8裝置會收不到的狀態卡了許久,使用PushNoticeToAndroidRequest.php來進行推送都很迅速地在Android 8以下裝置收到,若是透過阿里後台的推送則全裝置都能順利收到,這就不會是APP設計的問題。
這部分問題要爬文建議透過百度搜尋來查找,比Google來的更豐富且針對些,應該是阿里雲屬於內地的產品吧! 即便在那斯達克上市也不能免俗。
總之關鍵點在於...以下參考~
//XXX必須與APP設定的一致
$request_android->setAndroidNotificationChannel("XXX");
ExtParameters設定:
//這是透過 PushNoticeToAndroidRequest.php 使用的設定
$request->setAndroidExtParameters("{\"key1\":\"value1\",\"api_name\":\"PushNoticeToAndroidRequest\"}");
//這是透過 PushRequest.php 使用的設定
$request->setAndroidExtParameters("{\"k1\":\"android\",\"k2\":\"v2\"}");
//若設定成ALL則IOS相關設定需帶入
$request->setDeviceType("ANDROID");
//這設定貌似也要加~不過數字上沒甚麼感覺
$request->setAndroidNotificationBarType(1); //通知栏自定义样式0-100
$request->setAndroidNotificationBarPriority(1); //通知栏自定义样式0-100
小結: 許多阿里後台端的問題都需有內地帳號才能發問(這個在台灣手機認證上就掛了),所以即便是呼叫OPENAPI順利得到MessageID對於"沒收到"這檔是也是無濟於事,打轉許久只能透過Try & Error排除。
另外曾考慮透過Dot NET來呼叫OPENAPI,不過在帶入appkey那行總是編譯失敗,nullable long<n> 未定義,改用建議的DLL會造成更多的變數定義錯誤,這是就神奇了~~目前無解。
補充:使用PushNoticeToAndroidRequest設定NotificationChannel沒意義,追蹤相關的code看來沒支援/強制寫入固定值在回傳的陣列裡也是靜悄悄,所以用PushRequest.php來推送即可。
訂閱:
文章 (Atom)
