【问题标题】:fputcsv fails with queries over 20k recordsfputcsv 查询超过 20k 条记录失败
【发布时间】:2014-08-24 03:38:57
【问题描述】:

简单地说,当我将查询结果导出到 csv 时,它会像丝绸一样顺畅,直到查询结果达到大约 20k-25k 条记录。

当我达到那个标记时,我得到一个空白屏幕,并且创建的文件只有标题行,没有其他内容。我将查询拉回来一点,它运行良好,使用所有数据构建 csv 文件。

我尝试了各种记录、查询和表格,以确保它不是数据,所以我不知所措。我可以很好地查询并轻松分页超过 100 万条记录,但导出仍然失败。

$file_name = "new_file";

//Set field column names
$fields[] = 'Submit Date';
$fields[] = 'Submit Time';
$fields[] = 'Client STN';
$fields[] = 'Incident Type';
$fields[] = 'Level 1';
$fields[] = 'Level 2';
$fields[] = 'Level 3';
$fields[] = 'Employee ID';

//Create file
$fp = fopen('/var/www/html/data_exports/'.$file_name.'.csv', 'a');
if ($fp && $result) 
{
    fputcsv($fp, $fields);
    foreach ($result->result_array() as $row)
    {   
        $values = array();
        $values[] = $row['submit_date'];
        $values[] = date("H:i:s", $row['submit_time']);
        $values[] = $row['stn'];
        $values[] = $row['menu_text'];
        $values[] = $row['lvl1_menu_item'];
        $values[] = $row['lvl2_menu_item'];
        $values[] = $row['lvl3_menu_item'];     
        $values[] = $row['employee_id'];

        fputcsv($fp, $values);
    }
}

redirect('admin/data_export_files');

【问题讨论】:

  • 死机白页,报错\显示关闭,开启error_reporting(E_ALL); ini_set('display_errors', 1);
  • @Dagon 致命错误:在 /var/www/codeigniter/CodeIgniter_2.1.0/system/database/drivers/mysql/mysql_result.php 中允许的内存大小为 134217728 字节已用尽(尝试分配 32 字节)在第 152 行 .... 有趣但不知道这是什么意思
  • 正如它所说的,你使用的内存比php多是允许的
  • ini_set("memory_limit","512M");成功了。感谢您的帮助!
  • 我用啤酒付款 :-)

标签: php mysql sql csv fputcsv


【解决方案1】:

我在 cmets 中总结答案

第 1 步: 通过显示错误来查找任何错误

error_reporting(E_ALL);
ini_set('display_errors', 1);

第 2 步: 如果错误与已用尽的 xxx 字节的允许内存大小有关,则可以使用

ini_set("memory_limit","512M"); 
// you can increase/decrease the memory from 512M to any value 

注意:在大多数情况下不建议这样做,仅用于测试 click here了解更多详情

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 2013-11-02
    • 1970-01-01
    • 2017-04-12
    相关资源
    最近更新 更多