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,不至于特别慢。 请教PHP修改动态XML UTF8和GB2312的问题。。。 dom的xml问题。 这样的文本怎么存储到mysql数据库? 有关邮件传送的问题? 文本文件操作问题 关于session的问题!!! 通过图片传输数据的问题 请问哪里有支持PHP+Mysql的免费主页空间? 如何将获取到的图片以二进制的方式post到某地址 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,不至于特别慢。