作者towalking (小咪先生)
看板PHP
標題[心得] 解決上傳中文檔名的偷雞摸狗之道
時間Wed Oct 24 01:00:24 2007
今晚的時間,都被我拿來處理中文檔名上傳而消磨掉了,還蠻佩服自己能夠不屈不撓的(
偶爾也要給自己讚美一下嘛),雖然其中有好幾次想要翻桌,不過幸好終於研究出方法,
不然真不敢想像憤恨關掉電腦後的我會是什麼模樣(大爆走?也許都不用睡了…)。
先是搜尋有關中文檔名上傳的資料,其中我試了 php + javascript 的方法(
google 一下就可以知道是什麼方法囉),然而不知道是我沒有完全瞭解程式的意思還怎
樣,無論怎麼試都不成功。就在我打算狠下心讓使用者無法以中文檔名上傳資料的時候,
也許是廣大的使用者群眾默默給我集氣的關係,我突然靈光乍現!
不知道這個方法有沒有人分享過了(我花了一整個晚上才想到,唉…):
$filename = $_FILES['project']['name']; //取得上傳檔案的檔名
$path = "../upload/"; //設定儲存上傳檔案的資料夾路徑
if ( ! is_dir($path)) //檢查是否已有資料夾,若沒有,自動建立資料夾
mkdir($path);
list($firstname, $secondname) = explode(".", $filename);
//$secondname為存取副檔名的變數
$newname = $applyNo.".".$secondname; //以表單編號(一串數字)為新檔名
// 將使用者上傳的檔案複製到對應的目錄
copy($_FILES['project']['tmp_name'],$path.$newname);
//原本應該是copy($_FILES['project']['tmp_name'],$path.$filename);
總而言之,這個方法就是將使用者上傳以中文命名的資料,偷偷竄改成非中文的檔名
,然後再存放到伺服器上。要先說明的是,我寫的網頁是一個申請表單,上傳檔案是必填
欄位,而那個上傳檔案主要是給審核者看的。如果說,現在我要寫的是一個網路硬碟,使
用者將資料上傳後,因為程式改掉了檔名…(可以想像是什麼情況吧 XD)這樣想起來,
擅自竄改檔名還不是最佳解決之道呢。
ps. 文末要好好謝謝網路上眾多喜歡分享的朋友,還有總是默默給我指導的
php 手冊 XD。
--
‧‧‧
http://towalking.blogspot.com/ [ 給自己一個交待 ]‧‧‧
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.172.59.11
1F:推 ybite:PHP手冊是大好之物啊 :) 10/24 01:10
2F:→ aqzb:若有存中文檔名 下載的時候可以動一點手腳XD 檔名再換回來 10/24 01:21
3F:推 superGA:urldecode urlencode or base64_ decode base64_ encode 10/24 01:58
4F:推 gmoz:我是把檔名拿起來放在一個文字欄位裡 檔案重新命名為uid.xxx 10/24 11:24
5F:→ gmoz:下載時 再把檔名從文字欄位拿出來黏上副檔名 10/24 11:25
6F:→ gmoz:這樣不會出錯 不過使用者用右鍵另存目標 檔名會死掉 10/24 11:26