【发布时间】:2013-10-22 10:59:07
【问题描述】:
使用fgetcsv,我能否以某种方式破坏性读取我已读取和处理的行将被丢弃所以如果我没有在第一遍中通过整个文件,我可以回来继续the script timed out之前停下的地方吗?
其他详情:
我从供应商处获得了一个 200mb .gz 文件的每日产品提要。当我解压缩文件时,它变成了一个 1.5gb 的 .csv,有近 500,000 行和 20 - 25 个字段。我需要将此信息读入 MySQL 数据库,最好使用 PHP,这样我就可以安排 CRON 每天在我的网络托管服务提供商处运行脚本。
我在服务器上设置了一个硬超时,由托管服务提供商设置为 180 秒,并且任何单个脚本的最大内存使用限制为 128mb。我无法更改这些限制。
我的想法是使用 fgetcsv 函数从 .csv 中获取信息,但由于 3 分钟超时,我预计必须在文件中进行多次传递,我认为削减它会很好在我处理文件时,我不需要花费周期来跳过在前一次传递中已经处理过的行。
【问题讨论】:
-
请贴一些代码。否则无法帮助您优化代码。
-
不能只保存已经解析的行数吗?
-
“破坏性读取”将要求您重写整个文件以删除要删除的所有内容。那太贵了,你不想这样!
-
@moby04 请原谅,我是 fgetcsv 函数的新手,有没有办法让我在后续执行时跳过
x行? -
@Robert82:鉴于此函数使用相同的文件处理程序运行,您可以轻松使用其他文件函数,如 fseek...