php header 跳轉 ie問題
電影站提供電影bt下載,由於使用寶麗通播放器,上傳電影的時候會同時上傳一個電影的hash檔案。利用這個hash檔案,第一次請求時動態產生對應的bt種子儲存(指定路徑)並提供下載。當使用者點擊下載bt種子的時候,首先到對應的目錄下檢測對應的bt種子檔案是否存在,如果存在,則直接提供下載,否則先產生,再下載。
Bt種子的下載直接在檔案中使用header跳轉的方式。php檔案本身是gbk編碼。
後來發現,在chrome和firefox和ie6中都能正常工作,但是到了ie8中會出現找打不檔案的情況。這讓我很鬱悶,ie6都能行,結果ie8還有問題。
//指向torrent檔案,提供下載//$torrent_file_url = "torrent/tyvod1/科幻片/雷神托爾.torrent"$redirect_url = "http://vod.cqjtu.edu.cn/".$torrent_file_url;Header("HTTP/1.1 303 See Other"); Header("Location: ".$redirect_url);exit ();
經過對比測試,發現如果路徑中有中文,ie8就沒法下載。php檔案本身是GBK編碼,於是我們在跳轉之前,先將gbk編碼的字串轉換為utf8編碼。
//指向torrent檔案,提供下載//$torrent_file_url = "torrent/tyvod1/科幻片/雷神托爾.torrent"$redirect_url = "http://vod.cqjtu.edu.cn/".$torrent_file_url;Header("HTTP/1.1 303 See Other"); Header("Location: ".iconv("gbk","utf-8",$redirect_url));exit ();
這下,在chrome和firefox以及ie8和ie9中都沒問題了,但是在ie6中又不能下載了。中文亂碼。查資料之後說是因為ie6對UTF-8的支援不夠完善。尼瑪ie還真難伺候,無論是GBK編碼還是UTF-8編碼,chrome和firefox都能正確解析,ie自家兄弟居然出這樣的問題。
沒找到好的辦法,只得專門為ie6做一下…
//指向torrent檔案,提供下載//$torrent_file_url = "torrent/tyvod1/科幻片/雷神托爾.torrent"$redirect_url = "http://vod.cqjtu.edu.cn/".$torrent_file_url;Header("HTTP/1.1 303 See Other"); if(strpos($_SERVER['HTTP_USER_AGENT'],'MSIE 6.0')===false){//非ie6Header("Location: ".iconv("gbk","utf-8",$redirect_url));}else{//ie6Header("Location: ".$redirect_url);}exit ();
不知道是否有哪位仁兄曾經遇到過這個問題,或者有更好的解決方案。
順帶談一下寶麗通,不知道有沒有誰用過它。這東西怎麼說呢,有好也有不好。好的地方就是用起來p2p效果還是不錯,不好的地方就是使用不方便,官方給的資料太少,只提供了基本的樣本。還有那個.hash檔案,直接產生torrent不就得了嘛。最坑爹的就是tracker居然在設定為它自己的tracker,而且沒法更改。這要是內網使用者用這個根本就沒用。不過把官方的安裝程式解包之後還是可以修改tracker的。本來就是內網p2p,自己搭建個tracker比用它提供的外網tracker要安全,穩定得多。
如果哪位有更好的免費的區域網路p2p解決方案,煩請告訴小弟一聲)。