我在使用php将大量数据导出到csv文件时遇到了问题。
信息:
我的解决方案(我尝试了什么)
逐部分(从数据库)获取数据处理此数据(fputcsv
)将此部分写入临时文件 - 并通过Ajax
向用户发送信息(向他显示已处理的百分比数量) 。处理完最后一部分数据后,只需提供用户链接即可下载此文件。一切都很好,我做到了这个,这个解决方案适合我 - 在我当地的环境,但
问题是 - project I'm working on working with multiple servers
所以我遇到了一个问题,即临时文件可以存储在不同的服务器上。
例如:
我有3台服务器:Server1
,Server2
和Server3
。
我第一次使用limit 0 50000
从数据库中读取数据 - 处理它并将其保存到File.csv
上的Server1
,下一次迭代limit 50000, 50000
可以保存在另一个服务器 Server2
- 这就是问题所在。
所以我的问题是:
我可以存储处理过的临时csv数据,或者我错过了什么,我被困在这里,寻找建议。 每个建议或解决方案将不胜感激!感谢。
更新
问题得到解决
稍后我会发布我的解决方案
答案 0 :(得分:1)
您可以将带有限制的mysql查询用于dircly export the records into csv file from mysql database。
SELECT id, name, email INTO OUTFILE '/tmp/result.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
ESCAPED BY ‘\\’
LINES TERMINATED BY '\n'
FROM users WHERE 1
答案 1 :(得分:0)
如果您发布了代码,那将非常有用。我之所以这样说是因为它听起来并不像你一行一行地循环,这样可以节省大量的内存 - 没有大数据保存在RAM中。如果您逐行不循环并提交到CSV文件,那么我建议您修改代码以执行此操作,它可能会完全解决问题。
如果确实如此,即使逐行提交CSV也是不够的。然后,您遇到的问题是您的服务器设置依赖于无状态代码,但您的代码不是。
您可以使用以下任一方式解决此问题:
希望这有帮助。
答案 2 :(得分:0)
你可以使用ini_set增加php代码的执行时间(' max_execution_time',数字秒数);