我有大量数据,即(大约1000万条记录),并尝试导出.csv,但它完全无法正常工作,页面不断加载,然后导致空白页面。
我在max_execution_time
文件中设置了memory_limit
,php.ini
但仍无法正常工作,我尝试了不同的方法,但没有成功。
在CodeIgniter中,我使用了数组到CSV库:
$this->load->helper('csv') and also built in function
$this->load->dbutil()
但仍然没有用,
所以任何想法如何实现这个大量数据管理和导出CSV文件没有任何问题。
答案 0 :(得分:3)
您没有说明您正在使用哪个数据库,但我经常发现有大量记录,绕过框架并直接从查询中导出CSV要快得多。
在MySQL中,这看起来像:
SELECT id, name, price INTO OUTFILE '/tmp/products.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\n'
FROM products WHERE 1
答案 1 :(得分:2)
将“max_input_vars = 3000”或“max_input_vars = 5000”添加到php.ini文件中,然后尝试。希望这对你有所帮助。不要忘记重新启动Apache服务器。如果错误仍然存在,您可以扩展此限制。 [注意:我在通过浏览器导出大型csv文件时遇到了类似的问题。以上实现解决了我的问题]
答案 2 :(得分:1)
您可以使用以下示例查询生成csv文件,然后将其导出:
SELECT id, client, project, task, description, time, date INTO OUTFILE '/path/to/file.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM ts
答案 3 :(得分:0)
我不知道您想要实现什么,但通常不建议更改set_time_limit。这可能导致一个永远运行的脚本,如果你每隔x小时调用一次脚本就会在一段时间内使服务器崩溃。
但据我了解,您希望为用户生成csv文件。你现在做的是(我猜)用户进入链接并开始渲染csv。
你可以做什么(使用javascript)是当你点击链接时会启动一个进度条,你开始在后台渲染文件(甚至可以在完成时发送一封电子邮件)。这样用户仍然可以使用系统,用户也不会按重新加载,因此您开始渲染多个csv。
其次,我不知道codeigniter
框架,本机函数总是更快。但是如果你需要渲染1.000+行,你可以考虑共享负载。所以加载100,插入100行,加载100,插入100 ....(你得到我希望的点)(100只是一个数字)
希望这些提示可以提供帮助
编辑---一些代码示例---
嗯,花了一些时间,但这里有一些代码示例。
首先,如果csv存在,我们将检查每x秒(在示例中我做60)(所以每分钟)。要检查文件是否存在,我们使用此stackoverflow anser并添加一个简单的javascript间隔。
var checkFile = self.setInterval(function(){checkFile()},60000); // interval uses milli seconds as far as I know
function checkFile() {
if (UrlExists(url)) { // url exists is the function of the answer given
checkFile = window.clearInterval(checkFile);
// add other stuff to do
}
}
使用此代码,您可以检查文件是否已呈现,如果是,您可以向用户或其他人设置消息
答案 4 :(得分:0)
使用数据库中的数据导出CSV文件的简单解决方案.. 请点击以下链接..
http://writephp.tuxkiddos.com/2013/02/export-to-csv-ci-helper-file.html https://gist.github.com/opnchaudhary/4744797#file-csv_helper-php 对于GitHub链接