[心得] 解決上傳中文檔名的偷雞摸狗之道

看板PHP作者 (小咪先生)時間18年前 (2007/10/24 01:00), 編輯推噓3(303)
留言6則, 4人參與, 最新討論串1/1
今晚的時間,都被我拿來處理中文檔名上傳而消磨掉了,還蠻佩服自己能夠不屈不撓的( 偶爾也要給自己讚美一下嘛),雖然其中有好幾次想要翻桌,不過幸好終於研究出方法, 不然真不敢想像憤恨關掉電腦後的我會是什麼模樣(大爆走?也許都不用睡了…)。   先是搜尋有關中文檔名上傳的資料,其中我試了 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

10/24 01:10, , 1F
PHP手冊是大好之物啊 :)
10/24 01:10, 1F

10/24 01:21, , 2F
若有存中文檔名 下載的時候可以動一點手腳XD 檔名再換回來
10/24 01:21, 2F

10/24 01:58, , 3F
urldecode urlencode or base64_ decode base64_ encode
10/24 01:58, 3F

10/24 11:24, , 4F
我是把檔名拿起來放在一個文字欄位裡 檔案重新命名為uid.xxx
10/24 11:24, 4F

10/24 11:25, , 5F
下載時 再把檔名從文字欄位拿出來黏上副檔名
10/24 11:25, 5F

10/24 11:26, , 6F
這樣不會出錯 不過使用者用右鍵另存目標 檔名會死掉
10/24 11:26, 6F
文章代碼(AID): #177YYj4P (PHP)
文章代碼(AID): #177YYj4P (PHP)