2021年12月12日 星期日

三洋洗衣機 U3/U4 錯誤處理

 原先使用的洗衣機已超過十年,趁三洋福利品拍賣會再買一台新的洗衣機。新的洗衣機送來,舊的就請送貨員帶走。

買來立刻試洗,順利的洗好。但看到水平指示偏一邊,想把它調成中間,然後就無法成功的洗衣服了。開始是出現 U3 (衣服沒擺平) 的訊息,後來就變成一直出現 U4 (蓋子未蓋好) 的訊息。試了幾次之後,已是半夜 12點多,不好意思再試下去,只好把濕的衣服晾起來。

後來又只好把水平調成原來的前面低一點,洗了幾次,到脫水時就會出現 U3 的錯誤,不再有 U4 的錯誤。把脫水的衣服減少,分次脫,勉強可以成功脫水。

偵測上蓋開啟的磁簧開關,藏在 "開始" 按鍵的外殼下方,用磁鐵吸住仍會出現 "U4" 錯誤,顯示這個沒有問題。

Google 查詢 U4的相關資訊,知道洗衣槽後方有一支偵測洗衣槽晃動的白色塑膠桿,也會造成 "U4" 的錯誤訊息。試著撥那根桿子,仍無效。判斷應是後面偵測洗衣槽晃動的偵測器的問題,而且很有可能開關接觸不良,導致才按開始明明沒在動卻一直顯示 "U4" 的錯誤訊息。

後來有天洗衣服仍是到脫水就出現錯誤,停在 U3的訊息。把衣服擺好,再次脫水,就又一直死在 U4的訊息。用強力磁鐵去吸在前方下方的蓋子偵測磁簧開關,仍是持續出錯,真是讓人無限挫折。

分析狀況,確認洗衣機功能正常,就是那個偵測有問題,實在很不想找原廠來修。就看能不能拆開,看看能不能把那個偵測桿廢掉算了。

從上面看後面背板,有兩顆螺絲,沒有看到 "破壞不保固" 的封條,那就拆吧。


那兩顆螺絲 (自攻螺絲) 拆下,上蓋無法打開。只好爬到洗衣機後面拆背板,背板拆開,只有洗衣槽,所以拆背板是多餘的。倒是看到入水口的上方有一顆螺絲 (機械牙),拆下後上蓋就可以輕鬆打開了。


拆開後如下


左方的黑盒子拆下,就可以看到偵測開關的方形白色上蓋

拆掉4顆螺絲後,取出開關
不裝開關的情況下,可以順利脫水。是很想直接把開關廢了,但又怕每次脫水就轟隆轟隆的響,還是看看能不能調一下。

接頭不要硬拔,接頭的上端有一個凸起,押一下就可以輕鬆拔出。



把開關的蓋子打開,是簡單的兩支銅片,接觸點是焊在銅片上互相垂直的銅線。移動偵測桿,會把銅片撐開。



一直出現 U4 的錯誤,懷疑是接點接觸不良,用接點清潔劑噴一噴清潔一下。另外也把銅片角度調一下,讓桿子移動大一點才會讓接點斷開。

全部重新裝回去,試著脫水功能,可以正常運作。但真正有放衣服會如何,只好下次再試。還好要拆開很容易,若真不行,就加個短路開關,有人顧的時候就跳過偵測器。

幾天之後再次洗衣服,終於順利全程洗好。

2021年11月29日 星期一

光固化 3D列印問題處理


最近買了 Onyx Rigid Pro410,試印結果失敗,機器是 Sonic Mini,在 FP 請教前輩要怎麼調整,摘要整理如下。

第1圖,印完後,只剩3個還在,還有一個留一半


但如第2、3圖,底部有一半脫離


第4圖是要印的圖形,高度約25mm


第5圖是列印參數


網友回答如下
  • 曝光時間加長,抬升速度減慢
  • 曝光時間起碼4倍吧!底層2倍。不用害怕拉長時間變太大,他的形態控制很好。話說黑成這樣後固會受限,在成形的時候給比較多固化時間比較有利。
  • 曝光時間1.8改成7
  • 滅燈延時先改成15秒,底層不用改,先印一個小東西試試

列印參數設定可以參考 Phrozen Resin Profile

針對我買的幾種 Phrozen 樹脂的設定參數。


Water-Washable Resin

- Model Gray

ABS-like Resin -

Gray / White

ONYX Rigid

Pro 410

Basic Info

Layer Height

層高度 (mm)

0.05

0.05

0.05

Retract Speed

回程速度 (mm/min)

150

150

150

Bottom Layers 

底層

Layer Count

底層數

6

6

6

Exposure Time

曝光時間 (s)

25 - 35

25 - 35

35 - 40

Lifting Distance

抬升距離 (mm)

6

6

6

Lifting Speed

抬升速度

(mm/min)

60

60

60

Light-off Delay

滅燈延時 (s)

10

10

15

Transition Layers

Layer Count

6

6

6

Normal Layers

Exposure Time

曝光時間 (s)

2.0 - 2.5

2.0 - 2.5

7.0 - 11.0

Lifting Distance

抬升距離 (mm)

6

6

6

Lifting Speed

抬升速度

(mm/min)

60

60

60

Light-off Delay

滅燈延時 (s)

10

10

15

調整 lifting distance, lifting speed, and retract speed 之後, 必須使用計算程式計算滅燈延時確保延時夠多,濃稠的樹脂滅燈延時要多一點喔,一般來說都是加 2~3,Onyx 加 4~5 比較好。

滅燈延時太短可能會造成列印失敗,滅燈延時較長則會花費較長的列印時間。

後來列印成功時所設的參數

列印出來的成品



FB網友對於材料的分享

  • TR300超硬,不能鑽孔,會破碎。
  • 耀石黑,可以攻牙,反過來缺點就是在可動件上面,一下就磨掉了,而且還會起疹子。
  • Onyx Rigid Pro410,更軟有彈性,但是一樣不能凹會斷。官方說法,我們通常會拿來印較堅固可靠的模型,像是架子/ 掛勾等等。


2021年11月15日 星期一

在 Wine 下安裝 Autodesk Meshmixer

動機

因為 Vmware-workstation 升級之後,無法啟動 3D 加速,只好降級。假若能在 Wine 的環境下執行,就不用啟動 vmware。就來測測看吧。

執行環境

  • Gentoo
  • wine-staging-6.21
  • wine-mono-6.40
  • wine-gecko-2.47.2

安裝與執行

意外的簡單,經由下列步驟即可成功執行

## 建立 64位元的執行環境,選擇 Windows 10
WINEARCH=win64 WINEPREFIX=~/wine-autodesk winecfg
## 設定執行的環境變數
export WINEPREFIX=~/wine-autodesk
## 下載安裝檔,把它放到 ~/wine-meshmixer/drive_c 的目錄下,再執行安裝
wine c:\\Autodesk_Meshmixer_v3p5_Win64.exe
## 啟動應用程式
wine "C:\\Program Files\\Autodesk\\Meshmixer\\meshmixer.exe" 

其實安裝後會在桌面建立捷徑,可以直接點選執行,如下

env WINEPREFIX="/home/ajax/wine-autodesk" wine C:\\Program\ Files\\Autodesk\\Meshmixer\\meshmixer.exe 

可以執行了,但不會使用,再慢慢學吧。

再來試試 123D Design,已不再出新版的了,最後一版是 123D_Design_R2.2_WIN64_2.2.14.exe,仍可在網路上找到。

下載後,安裝

export WINEPREFIX=~/wine-autodesk
wine c:\\123D_Design_R2.2_WIN64_2.2.14.exe

其實安裝後會在桌面建立捷徑,可以直接點選執行,如下

env WINEPREFIX="/home/ajax/wine-autodesk" wine C:\\users\\Public\\Desktop\\123D\ Design.lnk 


2021年11月9日 星期二

新玩具 - 3D 印表機

參考連結: Mister Ngan 的網頁

在為機械鍵盤加裝 Trackpoint 模組時,有一些小零件必需要用翻模及削磨來做,做出來的成品總是很不理想。

幫最近買的新玩具打卡做紀念,FDM 和 光固化 3D印表機

先買最普遍的 FDM機器,要印的東西實在太小,完全失敗(照片中的綠色成品,紅色是原來的物件)

立刻再買一台 光固化機器,印出來的成品很精細(灰色成品)。請注意,不是精準,它的材質很容易變型,而且不好搞。目前比較喜歡玩光固化機器。


XYZprinting - da vinci mini w+3d列印機

  • 層厚設定: 0.100 - 0.400 mm
  • 列印尺寸: 150 x 150 x 150 mm
  • 列印速度: 120 mm/s
  • 適用材料: PLA / 抗菌PLA / PETG / Tough PLA
  • 線材直徑: 1.75 mm
  • 噴頭直徑: 0.4 mm
  • Z 定位精準度 Z : 0.001 mm
  • XY 定位精準度 X/Y: 0.0125 mm


中古 Phrozen Sonic mini
  • 技術: LCD光固化
  • 光源: 405nm ParaLED Matrix2.0
  • XY解析度: 0.0625mm
  • 列印尺寸: 120 x 68 x 130 mm
  • 建議層厚: 0.01 - 0.30 mm
  • 列印速度: 80 mm/hr



Phrozen Sonic Mini

赤兔切片軟體

第一次印表機選 default,切出來的檔案是 .stl,列印時,出現 Memory Error: M_400,印表機停在 1%,一動也不動。

查網路說可能是 USB 壞了,找一個,重新 Format,還是不行。

再把手冊讀一次,說要在設定選印表機 Phrozen Sonic Mini。照著做,就產生出 .phz 的檔,檔案 超過 1.6 MB,而 .stl 只有 3KB。再列印就可以正常開始了。

列印成品比較,下圖中紅色原來為 Trackpoint 的帽座,灰色為光固化成品,綠色為 FDM 成品。FDM 成品完全沒有細節。



下圖為下端要套上 Trackpoint 力量感測桿的座,黑色為原廠的座,灰色為光固化產品,因為使用軟體 XYZ 3D maker 的精度只到 0.1mm,成品套上桿子感覺略鬆,堪用。綠色為 FDM 成品,完全無法使用。




有了3D印表機,可以玩的東西又變好多好多。像淘寶買的垃圾鍵盤,功能正常,獨缺電池蓋,就可以想辦法印一個。印好後,二次固化失敗,一折就斷。因為沒樣本,自己測量畫圖,畫的不正確,成品也裝不進去。


各有不同的特性,很來又買了一台 Ender 3 MAX 的二手 FDM 列印機。

然後又看人家說 corexy 的機器比較好,又到淘寶買了一台,人民幣 1,899,大約台幣 8,837,重 15KG,運費就要台幣 728。

2021年11月4日 星期四

建立 USB 開機的 Win 10

 參考 https://www.kocpc.com.tw/archives/96445

使用

部署Windows 10系統到USB裝置前的準備動作:

  • 「命令提示字元(系統管理員)」
  • 輸入「diskpart」文字後按下〔Enter〕鍵
  • 輸入List Disk來查看目前的磁碟機設備狀況,主要是確定要安裝USB的裝置是哪一個編號
  • Select Disk 1    ← 選擇要安裝的磁碟編號
  • Clean                ←清除磁碟內的資料
  • Create Partition Primary         ← 建立新的磁碟區
  • Format FS=NTFS Quick          ←NTFS格式化新的磁區,使用快速格式化。
  • Assign               ← 指定USB裝置的磁碟機代號
  • 確定已經掛載了磁碟機後,接著要將磁區設定為使用中,請輸入「active」並按下〔Enter〕。
  • 此時會出現磁碟分割為使用中,最後就可以離開Diskpart公用程式,請輸入「exit」 並按〔Enter〕。

掛載 win10 iso

c: system, d: cdrom, e: usb disk

接下來再次進入「命令提示字元」視窗,請輸入

「dism /apply-image /imagefile:D:\sources\install.wim /index:1 /applydir:E:\」

文字,在按〔Enter〕鍵前還是確定一下自己的環境,如我的範例:C為我的Windows 10系統碟、E 為要安裝Windows To Go的USB行動硬碟(或隨身碟)、D 則是利用掛接ISO產生的虛擬光碟機。所以就是要將D虛擬光碟機上的isntall.wim映像檔部署到E碟的USB行動硬碟或隨身碟。

DISM 是 Deployment Imaging Servicing and Management 的縮寫,是Windows 7中的映像部署和管理工具,與之前的ImageX相似,而功能更加強大,總之,你把它想像成維修與管理Windows映像檔的管理工具就對了。

將install.wim佈署到USB的D碟上,最後剩下BCDboot來將建立開機項目的設定資料 (BCD) 存放區,而此開機項目讓您可以開機進入已安裝的Windows 映像區。假如你是使Windwos 7來佈署的話,請輸入「bcdboot.exe #:\windows /s #:」(#為磁碟機代號)

bcdboot.exe E:\windows /s E: /f ALL

為什麼要在Windows 8/10的環境下執行呢?因為Windows 8/10內的BCDboot版本才支援BIOS與UEFI兩種韌體,只要在Windows 8/10的命令視窗內輸入「bcdboot /?」即可一目了然。

終於來到結果測試的步驟了,想要測試剛剛製作的Windows 10 USB行動硬碟是否可以開機進入,所以到一台PC上,將剛剛製作的Windows To Go的USB行動硬碟插入機器的USB孔上(建議使用主機板上的USB孔),接著進入電腦BIOS內調整開機順序的設定,每個電腦的BIOS設定都有些差異,下圖是我測試機器的BIOS設定的畫面,重點是將USB硬碟或隨身碟調成開機時的第一個啟動裝置。


2021年9月22日 星期三

CentOS 6 安裝

 2020年底,CentOS 就完全宣告生命週期終止,連更新安裝都沒辦法了。2021年9月,使用者說他必須裝 6.9 才能跑所需的軟體,只好再來努力的裝。

硬體資訊

網卡及顯卡為
Ethernet controller: Intel Corporation Ethernet Connection (11) I219-LM
Ethernet controller: Intel Corporation Ethernet Controller I225-LM (rev 02)
VGA compatible controller: Intel Corporation CometLake-S GT2 [UHD Graphics 630] (rev 05)

開機磁碟為 m2 SSD。

依據 Intel 的說明,Intel Gigabit 網路連線有三個 Linux* 基礎驅動程式:

  • igb-x.x.x.tar.gz 驅動程式:支援所有 82575/6、82580、I350、I354 和 I210/I211 型的 gigabit 網路連線。
  • e1000e-x.x.x.x.tar.gz 驅動程式:支援 Intel® PRO/1000 PCI-E (82563/6/7、82571/2/3/4/7/8/9 或 82583) I217/I218/I219 型的 gigabit 網路介面卡。
  • e1000-x.x.x.tar.gz 驅動程式:支援 Intel® PRO/1000 PCI 和 PCI-X 系列的 gigabit 網路連線。

其中 I225 ,Intel 只提供 Win 64 的 driver,Linux 由 kernel 提供,模組名稱為 igc。

安裝經過

使用者僅說要裝 CentOS,但未指定要安那個版本,考慮 CentOS 8 很快就不再維護了,最先裝 CentOS 7。CentOS 7 裝好後,只有 I225 的網卡會動,不過重開機後又不動了,必需把網路線拔掉再重插,即可連上網路。I219 則完全不動,載入 e1000e 的 driver 也偵測不到網卡。只好改裝 CentOS 8,裝好後,兩個網卡都可正常運作。

不過使用者拿回去後,過了幾天就說要改裝 CentOS 6.9 才行,只好經歷重重難關來安裝 CentOS 6.9。

安裝 CentOS 6.9

在官網上說,自 CentOS 6.5 以後,就可以用 USB 隨身碟安裝。但試了用 dd 寫入 USB disk 或用 Rufus 寫都無法成功開機。注意,用 Rufus 將 ISO 檔寫入隨身碟時,要選 ISO 模式。更慘的是,先前可以用光碟片安裝,這次連安裝光碟片都無法開機,只好想其他辦法安裝。最後決定在 VM 中先裝好,再想辦法複製過去。

不敢執行更新,但也無法執行 yum install xxxx ,必須要修改 /etc/yum.repos.d/CentOS-Base.repo 的設定,指向  vault.centos.org,用下列指令一次搞定。

sed -i -e 's/^mirrorlist/#mirrorlist/g' -e 's/^#baseurl=http:\/\/mirror.centos.org\/centos\/$releasever\//baseurl=http:\/\/vault.centos.org\/6.10\//g' /etc/yum.repos.d/CentOS-Base.repo

再重新執行安裝。

槮器太新,連 CentOS 都無法正常啟動網路,一定要裝 Intel 的驅動程式,要先裝 devel-tool。

因為要裝最新的網卡驅動程式,必須安裝新版的 gcc。

因授權問題,網卡驅動程式必須手動下載。

使用 cpio 複製系統,用 USB 隨身碟,速度很慢很慢 ...

複製系統磁區
mount /dev/sdd1 /mnt/src
mount /dev/nvme0n1p1 /mnt/dst
cd /mnt/src
find ./ -xdev -print0 | cpio -pa0V /mnt/dst
cd /mnt
umount /mnt/src
umount /mnt/dst

mount /dev/sdd2 /mnt/src
mount /dev/nvme0n1p2 /mnt/dst
cd /mnt/src
find ./ -xdev -print0 | cpio -pa0V /mnt/dst
cd /mnt
umount /mnt/src
umount /mnt/dst

使用 chroot 進入目標磁碟,建立 grub 

mkdir /mnt/sysimage
mount /dev/nvme0n1p2 /mnt/sysimage
mount /dev/nvme0n1p1 /mnt/sysimage/boot
mount --bind /proc /mnt/sysimage/proc
mount --bind /dev /mnt/sysimage/dev
mount --bind /sys /mnt/sysimage/sys
chroot /mnt/sysimage
source /etc/profile
export PS1="(chroot) ${PS1}"

#######
# 進入 chroot 後,安裝 grub
#######
grub-install --target=i386-pc /dev/nvme0n1
grub-mkconfig -o /boot/grub/grub.cfg

### 記得修改 /etc/fstab ###

最前面要留約 2MB 的空間,建立 grub boot 資料,不然會出現像下面的錯誤。 可以先建一個 2MB 的分割區,等全部分割區都建好後,再把最前面的分割區刪除。

# grub-install --target=i386-pc /dev/nvme0n1
Installing for i386-pc platform.
grub-install: warning: your embedding area is unusually small.  core.img won't fit in it..
grub-install: warning: 不可能內嵌。GRUB 在本設置中僅能藉由區塊清單來安裝。然而,使用區塊清單不僅「不可靠」甚至令人挫折。.
grub-install:錯誤: 不會繼續處理區塊清單.

CentOS 6.9 使用 GRUB 0.97,系統裝在 nvme SSD,開機時會出現下面的錯誤。

----------------------------
grub
Probing devices to guess BIOS drives. This may take a long time.

    GNU GRUB  version 0.97  (640K lower / 3072K upper memory)

 [ Minimal BASH-like line editing is supported.  For the first word, TAB
   lists possible command completions.  Anywhere else TAB lists the possible
   completions of a device/filename.]
grub> find /boot/grub/stage1
find /boot/grub/stage1

Error 15: File not found
---------------------------------------------
所以 CentOS 6.9 不支援 nvme SSD開機。但是 CentOS 7 可以開機,因此將 GRUB 升級至 2.0 版。試著下載不同版本來測試,可安裝的最高版本是 2.02。

到 http://ftp.gnu.org/gnu/grub/ 下載 grub-2.02。要先安裝 bison 才能編譯。
yum install bison
wget http://ftp.gnu.org/gnu/grub/grub-2.02.tar.gz
tar xvfz grub-2.02.tar.gz
cd grub-2.02
./configure
make -j4
make install


  • yum install gcc gcc-c++
  • yum install svn texinfo-tex flex zip libgcc.i686 glibc-devel.i686
  • svn ls svn://gcc.gnu.org/svn/gcc/tags | grep gcc | grep release
  • cd ~/cent6-install
  • svn co svn://gcc.gnu.org/svn/gcc/tags/gcc_4_8_5_release/   (這個會花很多時間)
  • cd gcc_4_8_5_release/
  • ./contrib/download_prerequisites
  • cd ..
  • mkdir gcc_4_8_5_build/
  • cd gcc_4_8_5_build/
  • ../gcc_4_8_5_release/configure --prefix=/usr/local/gcc-4.8.5 --enable-languages=c,c++ 
  • make -j6,約 40分鐘
  • sudo make install
  • echo "/usr/local/lib64" > gcc-4.8.5.conf
  • sudo mv gcc-4.8.5.conf /etc/ld.so.conf.d/
  • sudo ldconfig,會出錯,不管它 --  ldconfig: /usr/local/gcc-4.8.5/lib64/libstdc++.so.6.0.19-gdb.py 不是一個 ELF 檔 - 其開頭的魔術位元組是錯的。

libgcc.i686 和 glibc-devel.i686 => 要同時安裝 32 和 64 的版本

------------------------------------------------
svn ls svn://gcc.gnu.org/svn/gcc/tags | grep gcc | grep release
.....
gcc_4_8_3_release/
gcc_4_8_4_release/
gcc_4_8_5_release/
gcc_4_9_0_release/
gcc_4_9_1_release/
.....

sudo vi /etc/profile.d/gcc_485_env.sh
PATH=/usr/local/gcc-4.8.5/bin:$PATH
source /etc/profile.d/gcc_485_env.sh
gcc --version
gcc (GCC) 4.8.5
-------------------------------------------

參考 CentOS 7,安裝 gcc-4.8.5 及 grub-2.0.2
預設是 enable multilib,不管它
--prefix=/usr/local/gcc-4.8.5
           新版本最終安裝的目錄,不然會裝到 /usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.8.5

-----------------------------------------
下載 kernel-devel-2.6.32-696.el6.x86_64.rpm
sudo yum install kernel-devel-2.6.32-696.el6.x86_64.rpm 

tar xvfz e1000e-3.8.4.tar.gz
cd e1000e-3.8.4/src/
make
common.mk:85: *** Kernel header files not in any of the expected locations.
(要先裝 kernel header,不然會出錯)

/home/ntu/cent6-install/e1000e-3.8.4/src/netdev.c:7788:57: 錯誤:「dev」 undeclared (first use in this function)
  struct net_device *netdev = pci_get_drvdata(to_pci_dev(dev));
修正 netdev.c
make 成功

sudo make install
----------------------------------------------------

https://sourceforge.net/p/e1000/bugs/656/
編譯 e1000e 3.8.4,netdev.c 有一行程式要改
原來
struct net_device netdev = pci_get_drvdata(to_pci_dev(dev));

修改成

struct net_device netdev = pci_get_drvdata(pdev);

------------------------------------
tar xvfz grub-2.02.tar.gz
cd grub-2.02
./configure
 ==> configure: error: bison is not found,sudo yum install bison
make
sudo -i  => 切換到 管理者,不然 make install 會失敗
make install
-------------------------------------------


編譯 grub 的問題,要使用自己定義的 alignof,不能使用 gcc 的 stdalign.h 的定義
#define alignof(type) offsetof (struct { char c; type x; }, x)

到 kernel 5 之後,才支援 I225



sh -c 'yes "" | make oldconfig'

sudo yum install ncurses-devel openssl-devel

Avoid speculative indirect branches in kernel (RETPOLINE) ==> OFF

 https://www.kernel.org/doc/html/latest/process/changes.html
幾乎不可能,還是放棄吧

使用 USB 磁碟安裝

新機器很強,考慮直接在新機器用 USB 磁碟開機,再用 Vmware 的 VM 安裝 CentOS 6.9。USB 磁碟使用 240GB 的 SSD 就很足夠了,裝的是 Ubuntu 18。BIOS 的 CSM 要設成 Legacy,VTx 的 VM支援功能要 enable。然後就可以在新機器上直接進行上述的動作了。

另外,USB 上的 OS 要裝 ssh, xrdp, build-essential,其中 xrdp 可以透過 remote desk 來遠端操作。Ubuntu 要另外安裝 ssh 才能啟動 sshd 服務。Vmare 則需要 gcc 用來安裝 kernel module。

遠端 SSH 連線

無法連線,要加參數才行
ajax@aj-i9 ~ $ ssh ntu@10.161.91.142
Unable to negotiate with 10.161.91.142 port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss
ajax@aj-i9 ~ $ ssh  -o HostKeyAlgorithms\ ssh-rsa  ntu@10.161.91.142
The authenticity of host '10.161.91.142 (10.161.91.142)' can't be established.
RSA key fingerprint is SHA256:3VMP62P2ny4P0tOWMjXPGMOWBDhAbzb+pP91J0kcAm4.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.161.91.142' (RSA) to the list of known hosts.
ntu@10.161.91.142's password: 
Last login: Tue Jul  5 16:37:45 2022 from 10.161.91.142
[ntu@localhost ~]$




2021年9月10日 星期五

使用 PHP 控制檔案下載

使用 PHP 控制檔案下載

Windows 需要修改 php.ini,將 extension=php_fileinfo.dll 的註記拿掉

程式碼如下

// 檢查身分
if (檢查身分不通過) {
    echo "非合法使用者";
     exit;
}

$up_dir = "D:\upload_files\sel_petition";
$pdf_fname = $up_dir.'/'. Util::gen_up_fname($ser_no);
// echo "$pdf_fname<br>";
if (file_exists($pdf_fname)) {
    $mtype = mime_content_type($pdf_fname);
    // echo "Content-type: {$mtype} <br>\n"; exit;
    ob_clean();
    header("Content-type: {$mtype}");
    echo file_get_contents($pdf_fname);
}

ASP 的版本 How to download the files using vbscript in classic asp


網誌存檔