MozTW 討論區 https://forum.moztw.org/ |
|
我解決了背景音樂問題 但是又引發出新問題= = https://forum.moztw.org/viewtopic.php?f=13&t=7278 |
第 1 頁 (共 1 頁) |
發表人: | sdcgf [ 2005-03-25, 22:10 ] |
文章主題 : | 我解決了背景音樂問題 但是又引發出新問題= = |
我用JavaScript寫了一個小程式 如果瀏覽者是使用ie瀏覽器的話 就執行 <object classid="CLSID:05589FA1-C356-11CE-BF01-00AA0055595A" data="[_db_name__].mp3" style="height:40px;width:200px;"> <param name="src" value="[__db_name__].mp3" valuetype="ref" /> <param name="autoStart" value="0" valuetype="data" /> <param name="DisplaySize" value="0" valuetype="data" /> <param name="Volume" value="100" valuetype="data" /> </object> 若不是ie 則執行 <object data="[__db_name__].mp3" type="audio/mpeg" style="height:40px;width:200px;"> <param name="src" value="[__db_name__].mp3" valuetype="ref" /> <param name="autoStart" value="1" valuetype="data" /> <param name="DisplaySize" value="0" valuetype="data" /> <param name="Volume" value="100" valuetype="data" /> </object> 後來為了防止盜連 所以我用php寫了一個防止外連的程式 把[__db_name__].mp3都改成 music.php?id=[__db_name__].mp3 卻發現改成這樣之後 ie可執行 Mozilla Firefox不行 (Orz) 請問有人知道問題出在哪嬤? 謝謝 |
發表人: | 李某人 [ 2005-03-25, 22:30 ] |
文章主題 : | |
MIME type沒設好罷... |
發表人: | sdcgf [ 2005-03-26, 22:08 ] |
文章主題 : | |
不好意思 不曉得您指的是我程式裡面寫的MIME type 還是我Mozilla Firefox裡面的MIME type設定? |
發表人: | BobChao [ 2005-03-26, 23:14 ] |
文章主題 : | |
sdcgf 寫: 所以我用php寫了一個防止外連的程式
把[__db_name__].mp3都改成 music.php?id=[__db_name__].mp3 只是問一下:你的 __db_name__ 裡應該不包括中文名稱對吧 ![]() |
發表人: | 李某人 [ 2005-03-27, 01:38 ] |
文章主題 : | |
雖然不知道你防止盜連的"程式"的內容是什麼, 但既然能以這種方法使用的話, 相信是Redirect之類的... 我所指就是在PHP裡發出正確的MIME type... 當然我都是猜的... |
發表人: | sdcgf [ 2005-03-27, 12:52 ] |
文章主題 : | |
BobChao 寫: sdcgf 寫: 所以我用php寫了一個防止外連的程式 把[__db_name__].mp3都改成 music.php?id=[__db_name__].mp3 只是問一下:你的 __db_name__ 裡應該不包括中文名稱對吧 ![]() 全都用英文命名 [__db_name__]是樣版裡歌曲名稱的變數 李某人 寫: 雖然不知道你防止盜連的"程式"的內容是什麼, 但既然能以這種方法使用的話, 相信是Redirect之類的...
我所指就是在PHP裡發出正確的MIME type... 當然我都是猜的... if(!file_exists($file_dir.$file_id.$file_key)){exit($_GET[id]."找不到");} else{$file=fopen($file_dir.$file_id.$file_key,"r"); Header("Content-type:audio/mpeg"); Header("Content-Disposition:attachment;filename=".$file_id.$file_key); while(!feof($file)){echo fread($file,50000);}fclose($file);} 這是PHP裡面的部分程式 MIME type與樣板裡面呼叫撥放器的MIME type一樣 在不使用這個PHP的防止盜連程式之前 Mozilla Firefox與Internet Explorer都可運行 使用後 則只剩下Internet Explorer可以 另外 不使用撥放器 直接在網址裡面輸入音樂檔案路徑 (如music.php?id=AAAAA.mp3) 則確定可以找的到AAAAA.mp3 下載且撥放 因此可以確定程式是找的到音樂的= = |
發表人: | BobChao [ 2005-03-29, 01:26 ] |
文章主題 : | |
喔天啊我終於解開這個謎了,真令人感動... 由於缺乏對其他 HTTP header 的瞭解和在網路上放音樂的經驗,著實吃了點苦頭 =.= 簡言之: 不要用 Content-Disposition: attachment 的方法送檔案,然後也順便送出 Content-Length 就行了。 代碼: $file=fopen("after_17.mp3","r");
header("Content-Type: audio/mpeg"); header("Content-Length: ".filesize("after_17.mp3")); while(!feof($file)){echo fread($file,50000);}fclose($file); ---- 以下是「遊記」,由於自以為蠻有趣就寫一下,沒興趣的看剛剛那段瞭解作法就好了.. ---- 由於我記得以前曾以送出「Content-Disposition: attachment; filename=something.pdf」的方式製作「下載 PDF 檔」的連結(使用者按下此連結後不會在瀏覽視窗中開啟 Acrobat Reader),或許問題就在那裡?所以做了這個測試。 1. 直接從位址列輸入網址,測試瀏覽器怎麼處理。 * Firefox: 以 plugin 開啟 * IE: 以 plugin 開啟 2. 撰寫與提問中相似的 PHP 程式碼,測試瀏覽器怎麼處理。 * Firefox: 下載檔案 * IE: 下載檔案 3. 以 LiveHTTPHeader 查閱直接輸入檔名與間接透過 PHP 接收檔案的差異。以下以加號代表「間接方式有」但「直接方式沒有」的項目,減號代表「直接方式有」但「間接方式沒有」的項目。 - Etag: "1c9d-285000-ca78dee4" - Accept-Ranges: bytes - Content-Length: 2641920 + X-Powered-By: PHP/4.3.3 + content-disposition: attachment; filename=after_17.mp3 + Transfer-Encoding: chunked 經此研究獲得的結論如下: * 不管是哪種方式,以輸入網址方法操作的話兩種瀏覽器處理方式都一樣。 * 兩種方式的 HTTP header 有不少差異 獲得假設: * 可能是瀏覽器把接收到的檔案轉交給 plugin 的方式不同? * 如果想辦法把兩種 header 都做到一樣,或許就可以了? 第一個假設如果成立的話,我們是鐵定無能為力的 XD 為了測試第二個假設,決定不用 attachment 作法傳檔案,直接把傳出去的東西當成音樂檔(ㄟ... 這樣講有點奇怪,反正就是不把他當成「網頁的 attachment」XD )。 哇,可以播了耶!不過沒送 Content-Length 會中斷,所以補上就 ok 了... ---- 都說了我只是自以為有趣... |
發表人: | sdcgf [ 2005-03-29, 09:05 ] |
文章主題 : | |
BobChao 寫: ----
以下是「遊記」,由於自以為蠻有趣就寫一下,沒興趣的看剛剛那段瞭解作法就好了.. ---- 老實說 遊記有很多我看不懂的地方 Orz 但是確實可執行了 感謝BobChao兄的幫忙 您的這一步 相信將會是網頁編寫者的一大步(哈) |
第 1 頁 (共 1 頁) | 所有顯示的時間為 UTC + 8 小時 |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |