PHP 板


LINE

看板 PHP  RSS
小弟最近在寫一個資料庫的搜尋網頁,資料是文字檔。前提是,資料檔可能隨時會更新, 而我沒有想要轉進去MySQL資料庫,覺得有點麻煩。 我嘗試了幾種搜尋的方式: ***方法1*** 資料檔是近300Mb的TXT檔,BIG5編碼 把原始檔案拆成三十多個檔,用ajax請求php,php是用: foreach(file($filename) as $fli=>$fl){ if(mb_stripos($fl, $needle,0,"UTF-8")!==false){ //找到資料的處理... } } 這個方法搜尋一次費時約12-15秒左右 ***方法2*** 先把資料檔案優化成TAB分欄位的文字檔,大小剩下一個42Mb的檔案 直接用SplFileObject()逐行比對關鍵字: $file = new SplFileObject($filename); while (!$file->eof()) { $fl = $file->fgets(); if(mb_stripos($fl, $needle,0,"UTF-8")!==false){ //找到資料的處理... } } 這個方式搜尋並沒有比較快,一次也費時約12-15秒左右 ***方法3*** 再把檔案每行先處理過,留下含有關鍵字部份當作索引檔, 然後再用方法2的方式搜尋,得到行數再回傳此行數的原始檔那行資料, 本來想說搜尋的文字檔小約剩下1/3,可以加速搜尋速度, 結果出乎意料的,這方式並沒有快多少,大概只差1秒。 ***方法4*** Google爬了一下文,有人推薦用shell_exec呼叫Linux內建的grep搜尋功能,果然用這方 式搜尋速度飛快,約0.3秒就搜尋完畢了。 $strResult = shell_exec('grep -i "'.$needle.'" '.$filename); $aResult = explode("\n",$strResult); foreach($aResult as $key => $value){ //找到資料的處理... } 但是問題來了, #問題1:除錯困難 當我嘗試把這方法應用到其他資料檔的時候,發現某些關鍵字明明有資料,使用方法1-3都 找得到,但是使用方法4就是找不到,不知道該怎麼debug。 而且搜尋關鍵字用英文比較會有問題,中文就沒事。 #問題2:網站移植困難 如果要把網站移到非linux架的主機上,就沒有辦法用方法4了,不知道有沒有php內建的 搜尋功能,效能可以比擬linux的grep的? --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.231.92.69
※ 文章網址: https://webptt.com/m.aspx?n=bbs/PHP/M.1473353416.A.FCA.html
1F:推 shadowjohn: grep 也有windows版的,只是你沒google... 09/09 08:58
2F:→ shadowjohn: 但這樣寫,你不怕command injection嗎 09/09 08:58
3F:→ ioklim: grep for windows不是內建,還要安裝;如果沒有權限就不行了 09/09 09:08
4F:→ ioklim: 感謝S大提醒command injection,我開始怕了@@ 09/09 09:11
5F:推 shadowjohn: 哪需要安裝,不就一個exe檔而已,想唬我 09/09 09:13
6F:推 shadowjohn: 作好filter跟escape是不用太擔心,只是你沒作 09/09 09:17
7F:→ ioklim: 所以只要把grep.exe放在同一個目錄就可以執行了,是這樣嗎? 09/09 09:36
8F:→ ioklim: filter&escape...嗯,筆記中,小的新手感謝S大教學 09/09 09:39
9F:推 shadowjohn: 是不用放同一個目錄,但你搜尋的位置跟路徑都要正確 09/09 09:58
10F:→ shadowjohn: 指令也可以用 c: && cd c:\book && c:\bin\grep.exe . 09/09 09:58
11F:→ shadowjohn: ..grep.exe "ooxx" *.exe -Ri 09/09 09:59
12F:→ MOONRAKER: windows有findstr,到處都有,不用裝。 09/09 10:01
13F:→ MOONRAKER: 以前做專案就兩個版本,php用grep,asp用findstr。 09/09 10:01
14F:推 Jerr: grep作者解釋為什麼快 有興趣可以看一下 09/09 11:43
16F:→ Jerr: 2010-August/019310.html 09/09 11:44
17F:推 shadowjohn: http://3wa.tw/URL/327 findstr vs grep 09/09 13:06
18F:→ shadowjohn: 原po要速度,findstr慢2~5倍的別用了 09/09 13:07
19F:→ ioklim: 感謝各位高手指點,小的獲益良多。 09/09 19:32
20F:→ ioklim: 剛剛試了一下findstr,嗯,這個速度我還可以接受。 09/09 19:33
21F:→ ioklim: 自首一下耍笨,發現找不到資料的問題,根本是我自己弄錯 09/09 19:33
22F:→ ioklim: 檔名,哈哈。 09/09 19:33







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燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP