php 大文件操作 php索引数据 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 那就直接操作DB了。 不用操作文件了。当然了,关键是你的文件在你的场景中能存入db中不 这些数据可以放到xml文件中吗 楼主要求的是文件方式,所以其他方案不应被采用显然第一列是唯一的,因为那是一个序号由于列间是制表符分隔的,所以每行长度不会是固定的(如果是定长数据,处理起来要简单些)于是你需要创建一个索引文件,方法如下:$fp = fopen($filename, ‘r');$t = 0;while($buf = fgets($fp)) { $ind[strtok($buf, "\t")] = $t; $t = ftell($fp);}fclose($fp);这样就得到了一个每个序号在文件中的位置的数组,排序后可写入定长记录文件中(索引文件)使用时先用二分法在索引文件中找到指定序号在数据文件中的位置500万最多折腾22次就找到了然后在数据文件中 fseek 定位的查到的位置,fgets 读取对应的行500万数据的索引放在数组中也是可接受的,不过 memory_limit 要大于 500M 可否用linux grep 命令找到該行,然後直接獲取該行數據呢?這樣會比php快很多的。 都500W数据了还用文件方式?为什么不想办法改善服务器?哪怕用个dbf或mdb的数据库也行啊 基于key-value的固定存储,可以用redis实现,如果不是那么考虑效率的话,可以试试用awk,不至于特别慢。 smarty这些文件夹都是什么意思? [高分悬赏]php读数据库字段的各种方法 PHP问题 在CSDN 论坛 没分就没人给回答吗?? 请教一个问题:上传图片到数据库~ 参数传递问题 sphinx的 SPH_MATCH_PHRASE 模式怎么用啊 菜鸟的问题:关于图型验证码。 require的问题 一个查询问题 我原样照着网上说的做的登录校验,为什么还是报错,好难过?!! php不能访问linux下home目录? 客户端websocket 无法连接上PHP socket问题
当然了,关键是你的文件在你的场景中能存入db中不
由于列间是制表符分隔的,所以每行长度不会是固定的(如果是定长数据,处理起来要简单些)
于是你需要创建一个索引文件,方法如下:
$fp = fopen($filename, ‘r');
$t = 0;
while($buf = fgets($fp)) {
$ind[strtok($buf, "\t")] = $t;
$t = ftell($fp);
}
fclose($fp);
这样就得到了一个每个序号在文件中的位置的数组,排序后可写入定长记录文件中(索引文件)
使用时先用二分法在索引文件中找到指定序号在数据文件中的位置
500万最多折腾22次就找到了
然后在数据文件中 fseek 定位的查到的位置,fgets 读取对应的行
500万数据的索引放在数组中也是可接受的,不过 memory_limit 要大于 500M
這樣會比php快很多的。
如果不是那么考虑效率的话,可以试试用awk,不至于特别慢。