PHP 板


LINE

看板 PHP  RSS
各位好,不知道這個標題下得好不好 但是,我大概先敘述一下我的程式要做甚麼,以及碰到的問題 ============================= 這是一個可以瀏覽並且播放音樂的網站 網頁端的PHP程式會先去找檔案清單(實際上是一個文字檔),內有檔名和連結 當然,也有可能還會有子資料夾 而當發現是一個音樂(MP3)檔時,會要求要開在新視窗,否則就在原視窗開啟就好 光看上面的說明可能不太清楚,所以下面附上Input檔案範例 (但是實際檔案內容不包含後面的註解) Input檔案範例一: Songs // 這是音樂清單的開頭指標 第一首歌 play.php?file=music1 第二首歌 play.php?file=music2 End_List // 清單結尾標示 //Input至此結束,不含換行 小說明:play.php是播放器頁面,必須開在新視窗 而Output必須是:(以HTML原始碼呈現) <a href = play.php?file=music1 target="_blank">第一首歌</a> <a href = play.php?file=music2 target="_blank">第二首歌</a> Input範例二: Folder // 資料夾清單開頭指標 第一個資料夾 list.php?list=2 // list.php就是這個網頁自己,他會列出一張檔案與資料夾的清單 End_List Songs 第一首歌 play.php?file=music1 End_List //Input至此結束,不含換行 Output必須是: <a href = list.php?list=2 >第一個資料夾</a> <a href = play.php?file=music1 target="_blank">第一首歌</a> ================================================= 以下是負責判斷清單類別,並且印出需要的HTML code的程式部分: <? $fp = fopen( "db/list_".$_GET['mid'].".txt", "r+" ) ; $temp = fgets( $fp ) ; // 取得第一張清單的類型 if ( strcmp($temp, "Folder") == 0 ) { // 發現子資料夾清單 echo( "請選擇一項類別繼續瀏覽:<br>" ); $linkname = fgets( $fp ) ; // 讀進第一位 while( strcmp( $linkname, "End_List" ) != 0 ) { // 清單還沒結束就一直讀 $link = fgets( $fp ) ; ?> <a href = "<? echo($link) ; ?>&title=<? echo($linkname) ; ?>" ><? echo($linkname) ; ?></a><br> <? $linkname = fgets( $fp ) ; // 下一位! } // while $temp = fgets( $fp ) ; // 既然有資料夾清單,那有歌曲的清單嗎? if ( strcmp($temp, "Songs" ) == 0 ) { // 有歌曲清單耶! echo( "或者,選擇一首歌曲播放:<br>" ); $linkname = fgets( $fp ) ; // 讀進第一位 while( strcmp( $linkname, "End_List" ) != 0 ) { // 清單還沒結束就一直讀 $link = fgets( $fp ) ; ?> <a href = "<? echo($link) ; ?>&title=<? echo($linkname) ; ?>" target="_blank"><? echo($linkname) ; ?></a><br> <? $linkname = fgets( $fp ) ; // 下一位! } // while } // if 有歌單 } // if 有資料夾&歌單 else if ( strlen($temp) == 10 ) { // 只發現歌曲清單 echo( "請選擇一首歌曲播放:" ); $linkname = fgets( $fp ) ; // 讀進第一位 while( strcmp( $linkname, "End_List" ) != 0 ) { // 清單還沒結束就一直讀 $link = fgets( $fp ) ; ?> <a href = "<? echo($link) ; ?>&title=<? echo($linkname) ; ?>" target="_blank"><? echo($linkname) ; ?></a><br> <? $linkname = fgets( $fp ) ; // 下一位! } // while } // else if // 歌單處理結束 } // if else { echo("<center>本區域測試中,尚未開放,敬請拭目以待</center>") ; } // else ?> ===================================================== 這程式的迴圈都會work,strcmp基本上也都沒有問題 但是很奇怪的是,只要從檔案讀出來,Songs長度會變成10(不是應該是5嗎?) 而Folder這個字串的長度則會變成12(不是應該是6嗎?) 所以造成無法進入迴圈,想當然爾,網頁上就是空白一片了 本來想說是不是有藏什麼字元,於是有嘗試加上trim()函式,但是結果一樣... 有任何人可以幫忙解答嗎?感激不盡! --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.250.127.134
1F:推 LPH66:檢查輸入檔的編碼 照敘述看似乎是 UTF-16... 02/07 17:24
2F:推 s25g5d4:直接讀檔名開檔喔 感覺就超危險的阿 02/07 17:58
3F:推 alog:開檔案前先做escape,不然你那個$_GET可以惡搞 02/07 18:00
不好意思,複製code的時候少複製一行: if ( file_exists( "db/list_".$_GET['mid'].".txt" ) ) { 所以~這是有做前置處裡的(只要找不到檔案就顯示一組訊息,並且不會繼續執行) 抱歉造成各位誤會~
4F:推 alog:另外資料的交換都統一使用UTF-8 這比較不易出問題 02/07 18:02
6F:推 alog:音樂歌曲易有日韓簡體,建議用mbstring 來處理字串 02/07 18:04
※ 編輯: jh961202 來自: 111.250.127.134 (02/08 00:31)
7F:→ alog:filename 基本上要 escape / \ . 這三個字元 02/08 02:23
8F:→ alog:建議養成習慣,不要把 $_GET or $_POST 之類的參數 02/08 02:26
9F:→ alog:直接用在 function 上 02/08 02:26
10F:→ alog:你可以這樣 music_filename = 跳脫("{$music_id}.txt"); 02/08 02:27
11F:→ alog:不僅好讀、好維護,之後要修正也比較好替換 02/08 02:28
不管置換成哪一種編碼方式都沒有用... (網頁本身是UTF-8,確定每一個文件也都是UTF-8,甚至還試過ANSI...) 另外,範例中的Songs長度不是顯示10,而是7 (多兩個字元,到底是誰啊OAO) 而Folder換成Subfolder會變成13個字元... (竟然多了4個字元...完全沒有規律阿0.0) ※ 編輯: jh961202 來自: 111.250.127.134 (02/08 20:18)







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:WOW站內搜尋

TOP