星期六, 11月 27, 2021
星期六, 11月 13, 2021
Bootstrap CDN
****************************************************
v3.3.7
****************************************************
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4/css/bootstrap.min.css"/>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
****************************************************
v4.3.1
****************************************************
<!-- 新 Bootstrap4 核心 CSS 文件 -->
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/css/bootstrap.min.css">
<!-- jQuery文件。務必在bootstrap.min.js 之前引入 -->
<script src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js"></script>
<!-- bootstrap.bundle.min.js 用於彈窗、提示、下拉菜單,包含了 popper.min.js -->
<script src="https://cdn.staticfile.org/popper.js/1.15.0/umd/popper.min.js"></script>
<!-- 最新的 Bootstrap4 核心 JavaScript 文件 -->
<script src="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/js/bootstrap.min.js"></script>
****************************************************
v4.6.1
****************************************************
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css" integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-fQybjgWLrvvRgtW6bFlB7jaZrFsaBXjsOMm/tB9LTS58ONXgqbR9W8oWht/amnpF" crossorigin="anonymous"></script>
****************************************************
v5.1.1
****************************************************
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-F3w7mX95PdgyTmZZMECAngseQB83DfGTowi0iMjiWaeVhAn4FJkqJByhZMI3AhiU" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-/bQdsTh/da6pkI1MST/rWKFNjaCP5gBSY4sEBT38Q/9RBh9AH40zEOg7Hlq2THRZ" crossorigin="anonymous"></script>
****************************************************
v5.1.3
****************************************************
<!-- CSS only -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<!-- JavaScript Bundle with Popper -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
星期三, 6月 16, 2021
安裝之源碼編譯 - 以ClamAV為範例
星期日, 4月 18, 2021
Web Share to 語法
◆ LINE 範例
https://social-plugins.line.me/lineit/share?url=https://hahow.in/&text=%E8%B7%9F%20YouTuber%20%E8%8E%AB%E5%BD%A9%E6%9B%A6%E5%AD%B8%E7%BE%8E%E5%9C%8B%E9%81%93%E5%9C%B0%E7%9A%84%E8%AA%AA%E8%A9%B1%E7%BF%92%E6%85%A3%20https%3A%2F%2Fhahow.in%2Fcourses%2F5f14aeabcad0d0afe5ea3898%2Fmain&from=line_scheme
◆ Facebook 範例
https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fhahow.in%2Fcourses%2F5f14aeabcad0d0afe5ea3898%2Fmain"e=%E8%B7%9F%20YouTuber%20%E8%8E%AB%E5%BD%A9%E6%9B%A6%E5%AD%B8%E7%BE%8E%E5%9C%8B%E9%81%93%E5%9C%B0%E7%9A%84%E8%AA%AA%E8%A9%B1%E7%BF%92%E6%85%A3&v=3
◆ LinkedIn 範例
https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Flink.medium.com%2FIoIhlZpCzfb
星期三, 2月 24, 2021
成熟人格
一、EQ較高:情緒比一般人穩定
二、見識較通透:理性比較强,且有較通透、整體性的人生觀
三、座右銘:有自己人生觀、處事原則
例如孟子之名言(本人較推崇「墨子」):
「
生,吾所欲也。義,吾所欲也。
二者不可兼得,捨生取義者也!
」
四、尊重他人
避免觸犯他人忌諱,可降低人際糾紛,並提高自己受歡迎的
人緣。
五、將心比心:能推己及人、能换位思考
自己不願意做的事,也不要求他人去做!
例如,當自己不願布施,而遇到災難却没有人幫助時,也能
理解他人不幫助自己,乃正常可接受之事,而不抱怨!並了
知他人之不願幫助自己,是因為自己也從不願布施幫助他人
。所以,在自己有難而不被人幫助時,是怨不了他人!
若人不作上述之想,反而一直怪罪他人、社會、國家,那麼
此人就無智且具有反社會人格。嚴重的話,在世會犯惡法;
死後,以惡業滿盈之故,難免受業力吸引而墮地獄受極大痛
苦!
六、處事以智:能自我嘲笑或幽默發言
遇到尷尬的事時(例如有人吐槽你),也能自我嘲笑,或幽
默一把,而把事件渡過,不會因此發怒、發怨、嫉妒等,而
發出負面的七情六欲反應。
七、慈悲:能體諒他人難處,或原諒他人
若他人行為不檢做下對己不善之事,但在不犯下違反自己原
則的錯誤時,在令對方了知之後,乃至對方亦不了知時,皆
能原諒對方。若已違反自己原則的話,也會盡量告知對方不
妥之處,即便對方仍愚執無知,亦能理解對方仍在輪迴中之
故,而原諒他。
非佛法遵循者,或無宗教信仰但具大智慧者,對於無知者之
冒犯,也存彼乃無知可憐憫者,而寬恕對方!
星期五, 2月 12, 2021
星期二, 11月 03, 2020
MySQL 使用 Shell 指令快速上傳資料庫
OS:Debian 8.11
Apache:2.4.6
DB:MySQL 5.5.62
PHP: 5.5.40
----------------------------------------------------
用這種方式速度比phpMyAdmin更快,能容許的檔案更大。當然要注意當初備份下載時所設定的參數(下載設定),小心當初設定參數不良,把現有資料庫中同名的 DB 刪除。
語法看下圖紅框處,
星期一, 9月 21, 2020
即時預覽圖片、多檔上傳 (with no bootstrap, no JQuery)
程式碼:
<!DOCTYPE html>
<html lang=zh-Hant>
<head>
<title>preview picture with no bootstrap no jQuery</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<style>
#OriginInput{
border:1px solid red;
height:30px;
opacity:100; /* 必須為 0,覆蓋的「綠色圖片按鈕」才有作用 */
width:90px;
cursor:pointer;
}
#click_me{/*這是圖片,來當覆蓋按鈕*/
margin-top:0px;
margin-left:-60px;
opacity:100; /* 0:不顯示 */
/* cursor:pointer; 没作用,被 #OriginInput 強制取代 */
}
</style>
<body>
(1) 三種方式取得上傳圖片資料:二進位碼字串、UTF-8字串、Base64編碼字串。<br />
(2) 上傳圖檔絕對路徑不正確,基本是瀏覽器之安全設定問題<br />
(3) 綠色圖片游標變手型時,點按可上傳圖檔 但CSS要先設定 OriginInput.opacity = 0<br />
(4) 預覽圖片可依需求動態調整大小<br />
(5) 本程式已有多檔上傳功能,略改寫就能達到<br />
<br />
<div id="result" style="border:1px solid red;">測試結果區</div>
<form action="後台程式名.php" method="post" enctype="multipart/form-data">
<input id="PretendInput" type="text" readonly >
<input id="OriginInput" type="file" multiple accept="image/gif, image/jpeg, image/png" onchange="setFilePath()" >
<img id="click_me" src="https://via.placeholder.com/100x35/00FF00/" ><br />
</form>
</body>
<script>
function setFilePath(){
//--- 取得單一檔案路徑 + 檔名 - 第1種正確 =>
var oOriginInput=document.getElementById("OriginInput");
var oFiles=document.getElementById("OriginInput").files[0];
if(oFiles && oFiles.name.trim().length > 4){
let reader = new FileReader();
/*
//-- 開始:用二進位字串顯示圖片資料 (讀出圖片16進位資料)
reader.readAsBinaryString(oFiles);
reader.onload = function(e) {
let vData = e.target.result;
document.getElementById("result").innerHTML = null;
document.getElementById("result").innerHTML = vData;
};
//-- 結束
*/
/*
//-- 開始:用UTF-8字串顯示圖片資料 (讀出圖片16進位資料,呈現很多都無字型碼)
reader.readAsText(oFiles,'UTF-8');
reader.onload = function (e) {
let vData = e.target.result;
document.getElementById("result").innerHTML = null;
document.getElementById("result").innerHTML = vData;
};
//-- 結束
*/
//-- 開始:解譯Base64編碼,直接預覽圖片 (讀出圖片16進位資料)
reader.readAsDataURL(oFiles);
reader.onload = function (e) {
let vData = e.target.result;
//let vData = document.getElementById("OriginInput").result; <= 錯誤語法
//說明:(1) e.target == document.getElementById("OriginInput"), 但是 input
// 没有 result 屬性。
// (2) 判斷 e.target 應該是最早取得結果值的物件,而 OriginInput 則是較後期才
// 取得上傳的資料(或由e.target 把部份值塞給 OriginInput 的屬性變數)。
//塞入完整「檔案路徑 + 檔名」
document.getElementById("PretendInput").value=oOriginInput.value;
//預覽檔名
document.getElementById("result").innerHTML =null;
document.getElementById("result").innerHTML =oFiles.name + " <br /> ";
//預覽圖片 (以下這段程式中的 vData 資料不是字串,是base64之圖片編碼)
document.getElementById("result").innerHTML += "<img src='" + vData + "' style='width:120px;height:120px;' alt='" + oFiles.name + "' />";
};
//-- 結束
}else{
document.getElementById("PretendInput").value="";
}
/*
//--- 第2種 -- 取得單一「檔案路徑 + 檔名」之結果不正確 => C:\fakepath\sa.png
var oFilePath=document.getElementById("OriginInput");
if(oFilePath.value.trim().length > 0){
document.getElementById("PretendInput").value=oFilePath.value;
alert("取得檔案路徑及檔名:" + oFilePath.value);
}else{
document.getElementById("PretendInput").value="";
}
*/
/*
//--- 取得檔案名稱(適合多檔上傳架構)
var oFiles=document.getElementById("OriginInput").files;
var j=oFiles.length;
//console.log("共 " + j + " 個檔名");
for(let i=0;i<j;i++){
if (oFiles[i]){
//alert("取得第 " + parseInt(i+1) + " 個檔名:" + oFiles[i].name.trim());
//以下三個有反應
console.log("取得第 " + parseInt(i+1) + " 個 name:" + oFiles[i].name.trim());
console.log("取得第 " + parseInt(i+1) + " 個 type:" + oFiles[i].type.trim());
console.log("取得第 " + parseInt(i+1) + " 個 size:" + oFiles[i].size);
//以下二個 undefined
console.log("取得第 " + parseInt(i+1) + " 個 tmp_name:" + oFiles[i].tmp_name);
console.log("取得第 " + parseInt(i+1) + " 個 error:" + oFiles[i].error);
}
}
*/
/*
//--- 取得檔案名稱(適合單檔上傳架構)
var oFiles=document.getElementById("OriginInput").files;
//if(oFiles && oFiles.length>0 && sFileName.length > 0){
if(oFiles){
let sFileName=oFiles[0].name.trim();
document.getElementById("PretendInput").value=sFileName;
alert("取得檔案名稱:" + sFileName);
}else{//清空檔名
document.getElementById("PretendInput").value="";
}
*/
}
</script>
</html>



