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/cn.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灯, 水草

请输入看板名称,例如:e-shopping站内搜寻

TOP