站內搜尋

Wednesday, March 6, 2024

[PHP] 如何解決 下載檔案的連結 因瀏覽器的快取(緩存) 無法下載到最新的檔案

//告訴瀏覽器不要緩存文件
header('Cache-Control: no-cache, no-store, must-revalidate'); // HTTP 1.1.
header('Pragma: no-cache'); // HTTP 1.0.
header('Expires: 0'); // Proxies.
//下載
header('Location: myfile/myzip.zip');

Monday, January 22, 2024

[其他] 天選5 Pro 重灌心得簡單分享 (適用天選4)

i9-14900HX 16G 1T RTX4060 2.5K
2025/01/10下單 2025/01/19到貨

檢查流程:

1. 打開包裹 檢視筆電外觀 (架好手機全程錄影)

2. 不插電 按電源 如果是新機 此時筆電不會開機

3. 將原本附送的電源線換成台規電源線 插電開機 進入簡中windows

4. 因為天選的windows金鑰是綁主板 而且沒送office 為了不要觸發保固造成萬一要退貨時的麻煩 所以全程不連網

5. 第一次進入簡中windows 有一個程序是連上網路 為了不要連網 這邊要按 shift+F10 跳出命令提示字元 然後輸入 oobe\bypassnro 按下Enter重開機後 再到連網這個步驟時 就會出現 "我沒有Internet連接" 的選項 選它就可以繼續往下進行了

6. 進入簡中windows後 檢查相關資訊 確認沒問題後 就可以關機準備重灌了


重灌流程:

1. 插上事前準備的重灌隨身碟 重開機 (製作重灌隨身碟的方式 可以參考 華碩官網的文章"[Windows 11/10] 如何建立及使用USB隨身碟的安裝媒體重新安裝Windows 11/10")

2. 開機後出現asus後按F2進入BIOS調整開機順序

3. 開機後會進入windows重灌模式 如果進不去代表隨身碟有問題 請換一個隨身碟

4. 重灌過程一樣不連網 到了磁碟機步驟 找不到磁碟機 就照華碩官方文章"[Notebook/Desktop/AIO/MiniPC] 疑難排解 - 安裝Windows 11/10時找不到磁碟機" 照著 "手動安裝Intel Rapid Storage Technology (IRST)驅動程式" 下面的步驟 在驅動程式的晶片組分類 找到 "Intel 快速儲存技術(IRST) 驅動程式" 下載後執行 在選擇"安裝"或"解壓縮"的步驟 選擇解壓縮到隨身碟中 

   *如果下載IRST 還是抓不到 可以用關VMD的方式解決

   *如果順利安裝IRST驅動後就會顯示所有的磁碟機 這邊看個人習慣 無腦作法是將所有磁區一個一個刪除 然後會合成一個完整的磁區 再將系統安裝在該磁區即可

5. 灌好進入繁中windows 接上實體網路線 確認網路有通 用微軟的store安裝 MyASUS

6. 登入 MyASUS 後 可以安裝所有的驅動及更新BIOS (如果之前是用關VMD的方式解決 更新後進不去windows 就進BIOS再把VMD關掉一次)

7. MyASUS 註冊產品 系統會顯示保固年限 搞定收工

Friday, November 3, 2023

[理財] 年均投報率 的公式 (以CAGR方式計算)

CAGR(年均複合成長率) 可以拿來簡單計算年均投報率的方式,公式如下:

CAGR = (期末價值 ÷ 期初價值) ^(1÷年數) – 1


舉例:

A股票買入時100元,持有一年後賣出,賣出時為120元,代入公式

(120 ÷ 100) ^(1÷1) – 1

得到0.2,也就是年均投報率是20%。


這也可以拿來算利息的投報率,例如:

存入1000元,三個月後領回本金與利息共1011.19元,代入公式

(1011.19 ÷ 1000) ^(1÷(3/12)) – 1

得到0.045517,也就是年均投報率是4.55%左右

Tuesday, October 31, 2023

[理財] 美股 ETF 複委託定期定額成本 (富X)

買賣美股大盤市值型 ETF (VTI) 交易成本如下:(幣別:美金)

《買入時》
0.48548股 (成交價格:205.9845)
手續費: $0.2 (0.2%) 計算方式=205.9845*0.48548*0.002=0.2元

《賣出時》
0.48548股 (當時股價:205.0806)
手續費: $0.15 (0.15%) 計算方式=205.0806*0.48548*0.0015=0.15元
交易稅: $0.01

結論:
1. 美股定期定額買進手續費率為0.2%,無最低手續費,贖回賣出比照原複委託手續費率收取(此例為0.15%)。
2. 賣出時有收一筆交易稅,推測是美國交易所費(SEC fee) 0.0008%,但被收了$0.01美元,不知道這邊怎麼算的。

Friday, October 20, 2023

[JavaScript] 超簡單找出某個時間的上一個月的日期

const date = new Date("2023-01-03");
date.setMonth(date.getMonth() - 1);
// 輸出上一個月的日期
console.log('上一個月的日期: ' + date.toISOString().slice(0, 10));

Saturday, September 23, 2023

[理財] 英股債券 ETF 複委託買賣交易成本 (富X)

買賣英股短債 ETF (IB01) 交易成本如下:(幣別:美金)

《買入時》
9股 (當時股價:106.42)
手續費: $1.44 (0.15%) 計算方式=106.42*9*0.0015=1.44元

《賣出時》
9股 (當時股價:106.64)
手續費: $1.44 (0.15%) 計算方式=106.64*9*0.0015=1.44元

結論:
1. 英股股票在買入時會收一筆0.5%的印花稅費,但多數ETF之收費免收印花稅。
2. 不論買或賣 交易成本就是"手續費",賣出時也不會有另一筆交易稅。
3. 因為正值券商免低手續費的活動期間,所以公式很簡單,交易成本 = 股價 * 股數 * 手續費約定費率。

補充 對帳單 數字:
112/09/08 買進 (9*106.42)+1.44 = 959.22 (應付款)
112/09/21 賣出 (9*106.64)-1.44 = 958.32 (應收款)
持有時間13天,套入年均投報率公式
(958.32 ÷ 959.22)^(1÷((13/30)/12))-1
得到 -0.02566,約 -2.56%
持有時間越短,手續費對於投報率的影響越大。

Friday, March 10, 2023

[MYSQL][PHP] 如何不影響使用者操作 完成大資料表的更新

有些資料表需要每日更新,而更新過程需要一段時間,一般的作法是刪掉舊資料,然後寫入新資料,過程中使用者可能會因為舊資料被刪掉又還沒寫入新資料,導致系統產生錯誤。

為了避免發生這種情形,較好的更新資料策略為:

Wednesday, March 8, 2023

[jQuery] 如何讓Tooltip視窗內的文字不要破表 (修改CSS屬性)

jQuery Tooltip 的提示視窗很好用,如果內容文字包含很常的英數字串,就會讓字串跑到視窗外,此時可以使用修改CSS屬性的方法進行調整...

Friday, February 24, 2023

[Bootstrap] 使用 Modal 製作彈跳視窗 如何避免使用者不小心關閉

利用 Bootstrap 的 Modal 可以製作出好看的彈跳視窗,但預設狀況下,使用者只要不小心按了"Esc",或是點擊到彈跳視窗外的範圍時,彈跳視窗就會關閉。

要避免這種情形,只要簡單設定兩個參數就可以了...

Thursday, February 9, 2023

[其他] 京東 網購 寄送台灣的運費 (集運:海運、空運...)

在京東買東西寄送台灣,通常運費顯示"0"是指在境內段的運費,寄送台灣要再加上跨境配送的費用(且運費不會立即顯示),常見可選 1.三方集運-空運(¥24.00起)、2.官方集運-空運經濟(¥30.00起)、3.三方集運-海運(¥34.00起),這裡不要看到空運只要人民幣24元就直接選下去,這是最低收費 不是你這張單的運費,以一個輕薄型螢幕來說,包裹重量4.5公斤,如果選 三方集運-海運,首重34元/3kg、續重8元/1kg,所以運費是 34+(8*2)=人民幣50元(約台幣222元),如果選 三方集運-空運,首重24元/1kg、續重11元/0.5kg,所以運費是 24+(11*8)=人民幣112元(約台幣496元)。

明細如下:

Saturday, October 22, 2022

[其他] 在 Microsoft store 刷卡買錯遊戲 如何快速申請退款

 剛剛在 Microsoft store 刷卡了遊戲,發現買錯了,想要退刷,但進入微軟的產品訂購紀錄頁面後,找不到申請退款的連結,非常不方便...

其實微軟有提供線上申請退款的頁面,只是沒有放在訂購紀錄頁面上,而且只有英文,就是下面的連結,進入該網頁後如果已經是登入狀態,會自動出現已經購買的遊戲,所以只要勾選想退款的遊戲,然後選一下退款的理由,送出後就會馬上收到退款申請已受理的Email通知信,完全不用聯絡客服,非常迅速方便。


https://support.xbox.com/en-US/help/subscriptions-billing/buy-games-apps/refund-orders

Friday, October 21, 2022

[JavaScript] 字串替換 replace() 如何全部替換 (IE瀏覽器也適用)

 var date = '2022-10-21';

date1 = date.replace("-", "");

alert(date1);  //會得到 202210-21

//如果我們希望得到 20221021 會使用 replaceAll 來替代 replace 但IE瀏覽器不支援此語法 請使用下面方式

date2 = date.replace(/-/g, "");

alert(date2);  //就會得到 20221021 很簡單吧

Friday, August 5, 2022

[PHP] 用程式檢查文字檔編碼是否為 "UTF-8 碼 (檔首有BOM)"

UTF-8 的文檔分為 "檔首有BOM" 及 "檔首無BOM" 兩種,如果遇到程式讀取使用者上傳的文檔,明明用記事本打開第一碼是A(舉例),但用程式讀內容抓到的第一碼卻不是A,可能這個檔案就是檔首含BOM的文件,檢查方式很簡單,如下....

Thursday, April 28, 2022

[MYSQL] 最簡單的單筆(或多筆)資料備份語法 (同table或不同table皆可)

單筆:
表A的某筆資料(例如:id=5) 要變動前,希望能先備份到表B,語法如下:
INSERT INTO table_b SELECT * FROM table_a WHERE table_a.id = '5'

多筆:
表A的多筆資料(例如:type=1) 要變動前,希望能先備份到表B,語法如下:
INSERT INTO table_b SELECT * FROM table_a WHERE table_a.type = '1'
此時table_a只要type是1的資料,不管幾筆都會寫到table_b。

部分欄位修改:
假設我要要將表A中type=1的資料,全部複製一份,且同時改寫部分欄位,語法如下:
INSERT INTO table_a (`type`, `name`, `qty`)
SELECT 2, `name`, NULL
FROM table_a
WHERE table_a.type = '1'
此時table_a只要是type是1的資料,會全部複製一份,且type改為2、name維持一樣、qty全部為NULL,新增到資料表上。

Monday, February 21, 2022

[PHP] IE瀏覽器下載特殊附檔名檔案時(如 .nlbl檔) 會自動變成.zip檔

簡單的下載連結 <a href="abc.nlbl">NiceLabel檔案下載</a> 

Chrome、Firefox 都可以正常下載,但 IE 下載時會自動改成 a.zip,可用下面的程式碼來設定 header,如下:

<PHP的部分>

if ($_GET['type'] == 'nlbl' && $_GET['file']) {

  header('Content-Type: application/octet-stream');

  header('Content-Disposition:attachment; filename = '.$_GET['file']);

  readfile($_GET['file']);

}


<HTML的部分>

<a href="?type=nlbl&file=abc.nlbl">NiceLabel檔案下載</a>

Tuesday, October 5, 2021

[PHP] 簡單DIY一支監測網站是否掛掉(hang或down)的程式 (配合cronjob或工作排程)

網站有時會因為各種原因掛掉(或半死不活網頁一直轉圈圈),因為server主機或服務還活著,有些網管監控軟體無法立即反映出問題,我們可以簡單寫一支小程式去監測網站的回應時間...

Monday, August 9, 2021

[PHP] 陣列的排序函式

效果 昇冪 降冪 使用者定義的順序
依值排序,然後重新指定從0開始的索引 sort() rsort() usort()
依值排序 asort() arsort() uasort()
依鍵排序 ksort() krsort() uksort()


備註:上面的排序法已經可以解決大部分的問題,PHP還有提供另一種非常符合人性的自然排序法,有分大小寫的natsort()與不分大小寫的natcasesort()兩種,如下:
$arr = array("temp15.txt","Temp10.txt","temp1.txt","Temp22.txt","temp2.txt"); sort($arr); //基礎排序 無法正確排序帶文字的數字 eg. 1.jpg 10.jpg 2.jpg print_r($arr); natsort($arr); //自然排序 有區分大小寫 print_r($arr); natcasesort($arr); //自然排序 不區分大小寫 print_r($arr);

Sunday, August 1, 2021

[PHP] 匿名函式(又稱閉包closure) 引用外部變數時,使用 global 與 use 的差異

以 usort() 來舉例,使用匿名函式的寫法如下... $array = array(200, 300, 100); usort($array, function($a, $b) { return $a > $b; }); print_r($array); //Array ( [0] => 100 [1] => 200 [2] => 300 ) 如果我們想用一個變數($bln)去決定升冪或降冪,寫法可以有以下兩種...
使用 global : $array = array(200, 300, 100); $bln = 1; usort($array, function($a, $b) { global $bln; if ($bln) { return $a < $b; } else { return $a > $b; } }); print_r($array); //Array ( [0] => 300 [1] => 200 [2] => 100 ) 使用 use : $array = array(200, 300, 100); $bln = 1; usort($array, function($a, $b) use($bln) { if ($bln) { return $a < $b; } else { return $a > $b; } }); print_r($array); //Array ( [0] => 300 [1] => 200 [2] => 100 ) 用 global 與 use 結果是相同的,但如果我們多包一層function的時候... $array = array(200, 300, 100); $bln = 1; function mysort($array) { $bln = 0; usort($array, function($a, $b) use($bln) { if ($bln) { return $a < $b; } else { return $a > $b; } }); return $array; } $array = mysort($array); print_r($array); //Array ( [0] => 100 [1] => 200 [2] => 300 ) $array = array(200, 300, 100); $bln = 1; function mysort($array) { $bln = 0; usort($array, function($a, $b) { global $bln; if ($bln) { return $a < $b; } else { return $a > $b; } }); return $array; } $array = mysort($array); print_r($array); //Array ( [0] => 300 [1] => 200 [2] => 100 ) 結論:可以看到 use 是使用所在範圍內有效的變數,而 global 則一定是使用全域變數。

Saturday, July 24, 2021

[PHP] exit()的用法 以及 與die()的差異

exit、exit()與exit(0)都可以讓程序結束,如果希望程序結束時印出字串,可以使用exit('Error'),至於die()就是exit()一模一樣的別名函式,常於連線資料庫時使用。 $con = mysql_connect("localhost","mysql_user","mysql_pwd"); if (!$con) { die('Could not connect: ' . mysql_error()); //等同 exit('Could...'); }

Friday, July 23, 2021

[PHP] if 的三種寫法

第一種 if (10 > 0) echo 'Yes'; //只能有一行 超過會報錯 else echo 'No'; 第二種 if (10 > 0) { echo 'Yes'; echo '...'; //可以有多行 } else { echo 'No'; echo '....'; } 第三種 if (10 > 0) : echo 'Yes'; echo '...'; else : echo 'No'; echo '...'; endif; 註1: 建議使用第二種寫法。

註2: 第三種寫法與第二種基本上相同,常見於HTML混寫時使用(例如:laravel的blade樣版)。
switch、while、for、foreach...也有類似的替代寫法 switch ($a) : case 'A': echo 'AAA'; break; endswitch; while ($i < 10) : $i++; echo $i; endwhile; for ($i = 0; $i < 10; $i++) : echo $i; endfor; foreach ($arr as $v) : echo $v; endforeach;

Tuesday, July 20, 2021

[PHP] 如何將網頁表格(table)轉成Excel的xlsx檔 (使用PHPExcel)

先下載PHPExcel套件(這篇是用1.7.X版示範),然後程式碼如下...
//程式碼大概就下面七行 ob_start(); include_once('PHPExcel.php'); $obj = new ExcelService(); $html_table = '<table><tr><td>123中文</td></tr></table>'; //要轉成Excel的表格 $html_table = mb_convert_encoding(html_entity_decode($html_table), 'HTML-ENTITIES', 'UTF-8'); //避免中文變成亂碼 $excelFile = $obj->generateExcel($html_table, 'myexcel', 'my_excel_folder'); //產生的Excel的檔名 並指定要放在哪個資料夾 ob_end_clean(); header('Location: my_excel_folder/myexcel.xlsx'); //固定的Class 可以不用改 class ExcelService { public function generateExcel($content, $fname, $tmp_path = '') { if ($fname == '') $fname = date('YmdHis'); if ($tmp_path == '') $tmp_path = 'temp'; $filename = $fname . '.xlsx'; $htmlname = $fname . '.html'; $excelFile = $tmp_path . '/' . $filename; $htmlfile = $tmp_path . '/' . $htmlname; file_put_contents($htmlfile, $content); $objReader = new PHPExcel_Reader_HTML; $objPHPExcel = $objReader->load($htmlfile); $objPHPExcel->getProperties()->setCreator($uid); $objPHPExcel->getProperties()->setLastModifiedBy($uid); $objPHPExcel->getProperties()->setTitle("Office 2007 XLSX Document"); $objPHPExcel->getProperties()->setSubject("XLSX Report"); $objPHPExcel->getProperties()->setDescription("XLSX report document for Office"); //下面這段是設定stlye與格式 不設定也可以 $style = array( 'alignment' => array( 'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_LEFT, ) ); $objPHPExcel->getActiveSheet()->getDefaultStyle()->applyFromArray($style); //設定全部置左 $objPHPExcel->getDefaultStyle()->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT); //設定全部格式為文字 $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $str_col = $objPHPExcel->setActiveSheetIndex(0)->getHighestColumn(); //eg.J $str_dim = $objPHPExcel->setActiveSheetIndex(0)->calculateWorksheetDimension(); //eg.A1:J21 foreach (range('A', $str_col) as $columnID) { $objPHPExcel->getActiveSheet()->getColumnDimension($columnID)->setAutoSize(true); } $objPHPExcel->getActiveSheet()->getStyle($str_dim)->getAlignment()->setWrapText(true); $objPHPExcel->getActiveSheet()->removeRow(1); //移除第一列空白 $objWriter->save($excelFile); unlink($htmlfile); if (file_exists($excelFile)) { return $excelFile; } return false; } }

[PHP] 如何將數個檔案進行打包 並產生ZIP壓縮檔 (使用PHP原生套件 ZipArchive )

假如需要數個檔案打包成一個壓縮檔,可利用PHP原生套件ZipArchive,使用方法很簡單,如下...
//實際所需要的code大概就下面四行 $zip = new ZipArchive(); if ($zip->open('my_zip_folder/myzip.zip', ZipArchive::OVERWRITE) === TRUE) { //指定打包之後的壓縮檔要放在my_zip_folder下面 檔名為myzip.zip addFileToZip('my_file_folder/', $zip); //my_file_folder 就是我們要打包的資料夾 裡面必需有兩個以上的檔案才能打包 $zip->close(); } //產生ZIP檔後讓瀏覽器執行下載動作 header('Location: my_zip_folder/myzip.zip'); //固定的function 不用改 function addFileToZip($path,$zip){ $handler = opendir($path); //開啟當前資料夾由$path指定。 while (($filename = readdir($handler)) !== false) { if ($filename != "." && $filename != "..") { //資料夾檔名字為'.'和'..',不要對他們進行操作 if (is_dir($path."/".$filename)) { // 如果讀取的某個物件是資料夾,則遞迴 addFileToZip($path."/".$filename, $zip); } else { //將檔案加入zip物件 $zip->addFile($path."/".$filename); } } } @closedir($path); }
PS.如果無法使用ZipArchive,請至php.ini裡面把extension=php_zip.dll前面的"分號"刪除,重新啟動Apache。

Wednesday, November 18, 2020

[理財] 台股APP下單 (以兆豐證券為例)

《非當沖》

  做多:

    現股買 => 現股賣

    融資買 => 融資賣

  做空:

    融券賣 => 融券買


《當沖》

  做多:

    現股買 => 現股賣

    融資買 => 融券賣

  做空:  

    現股賣 => 現股買  *現股賣時,要勾選"現沖",沒勾的話會顯示庫存不足。

    融券賣 => 融資買

Monday, October 19, 2020

[PHP] 解決 「使用 Postman 產生的 PHP - cURL 程式碼,卻顯示空白畫面的問題」

Postman 的 Code 功能可以自動產生程式碼 (如圖一所示),理論上在 Postman 可以抓到資料,將程式碼貼到 PHP 也應該能夠抓到相同資料,但實際上卻只會顯示空白畫面,那是因為缺了一個SSL的CURL設定,加上後就可以抓到資料了(如圖二所示)。

CURLOPT_SSL_VERIFYPEER => false 




Friday, August 21, 2020

[其它] 線上產生 Barcode 的網站 (支援 GS1-128 / EAN-128)

http://generator.onbarcode.com

http://www.keepautomation.com

這兩個網站都有線上Barcode產生器

以 GS1-128 / EAN-128 格式為例,產生器網址如下:

http://generator.onbarcode.com/online-gs1-128-barcode-generator.aspx

http://www.keepautomation.com/online_barcode_generator/ean_128/

而且支援網址直接產生圖檔,很佛心。


Thursday, July 30, 2020

[MAC] 解決系統跳出『macOS無法驗證「XXX」的開發者。您確定要打開它嗎?』的問題

MAC 作業系統為了保護系統安全,當我們使用自行下載的應用程式時,會跳出警告訊息同時也無法使用,以往的作法是去 系統偏好設定 / 安全性與隱私權,把指定的應用程式設定強制打開,就不會跳出警告訊息並且可以正常使用。

但是在某次更新後,安全性與隱私權中的 App 選項只剩下「App Store」與「App Store和已識別的發開者」兩個選項,導致以前可以用的應用程式變成無法使用,解決方法很簡單,打開終端機直接下命令
sudo spctl --master-disable
再打開安全性與隱私權的設定畫面就會發現之前消失的選項又回來了。

圖一、更改前的選項只有兩個


圖二、更改後的選項有三個

PS. 如果想要恢復預設,只要輸入下列指令就會恢復原本的樣子了
sudo spctl --master-enable