//告訴瀏覽器不要緩存文件
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');
站內搜尋
Wednesday, March 6, 2024
[PHP] 如何解決 下載檔案的連結 因瀏覽器的快取(緩存) 無法下載到最新的檔案
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.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
結論:
Friday, October 20, 2023
[JavaScript] 超簡單找出某個時間的上一個月的日期
date.setMonth(date.getMonth() - 1);
// 輸出上一個月的日期
console.log('上一個月的日期: ' + date.toISOString().slice(0, 10));
Saturday, September 23, 2023
[理財] 英股債券 ETF 複委託買賣交易成本 (富X)
買賣英股短債 ETF (IB01) 交易成本如下:(幣別:美金)
手續費: $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元
結論:
112/09/21 賣出 (9*106.64)-1.44 = 958.32 (應收款)
(958.32 ÷ 959.22)^(1÷((13/30)/12))-1
Friday, March 10, 2023
[MYSQL][PHP] 如何不影響使用者操作 完成大資料表的更新
有些資料表需要每日更新,而更新過程需要一段時間,一般的作法是刪掉舊資料,然後寫入新資料,過程中使用者可能會因為舊資料被刪掉又還沒寫入新資料,導致系統產生錯誤。
為了避免發生這種情形,較好的更新資料策略為:
Wednesday, March 8, 2023
[jQuery] 如何讓Tooltip視窗內的文字不要破表 (修改CSS屬性)
Friday, February 24, 2023
[Bootstrap] 使用 Modal 製作彈跳視窗 如何避免使用者不小心關閉
利用 Bootstrap 的 Modal 可以製作出好看的彈跳視窗,但預設狀況下,使用者只要不小心按了"Esc",或是點擊到彈跳視窗外的範圍時,彈跳視窗就會關閉。
要避免這種情形,只要簡單設定兩個參數就可以了...
Thursday, February 9, 2023
[其他] 京東 網購 寄送台灣的運費 (集運:海運、空運...)
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() |
$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 的差異
$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()的差異
$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)
//程式碼大概就下面七行
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 )
//實際所需要的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);
}
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」的開發者。您確定要打開它嗎?』的問題
但是在某次更新後,安全性與隱私權中的 App 選項只剩下「App Store」與「App Store和已識別的發開者」兩個選項,導致以前可以用的應用程式變成無法使用,解決方法很簡單,打開終端機直接下命令
圖一、更改前的選項只有兩個
圖二、更改後的選項有三個