PHP正在csv export上退出

时间:2015-01-16 18:44:05

标签: php codeigniter

我正在尝试从Codeigniter中导出具有指定字段集的联系人列表。 PHP正在退出,我无法弄清楚原因。它导出4,092个联系人然后退出,但导出的数组的计数是140,699。 PHP没有给我任何错误,在我的测试服务器上导出功能正常。这是代码:

function admin_export()
{
    set_time_limit(0);

    if(!$this->ion_auth->in_group(array('admin')) && !$this->input->is_cli_request())
        die();


    $contacts = $this->contacts_model->get_contacts();
    $export_fields = unserialize($this->contacts_model->get_contact_export_fields());

    if(!file_exists($this->config->item('tmp_path')))
            mkdir($this->config->item('tmp_path'));

    if($export_fields == false)
    {
        echo json_encode(false);
    }
    else 
    {
        $fh = fopen($this->config->item('tmp_path').'export.csv', 'w');

        fputcsv($fh, $export_fields, ',');

        foreach($contacts as $i => $contact)
        {
            $id = $contact['id'];

            foreach($contact as $k => $v)
            {
                if(!in_array($k, $export_fields))
                {
                    unset($contacts[$i][$k]);
                }
            }

            if(in_array('role', $export_fields))
            {
                $contacts[$i]['role'] = '';

                $roles = $this->contacts_model->get_contact_roles($id);
                foreach($roles as $role)
                {
                    $contacts[$i]['role'] .= $role['role'].';';
                }

                $contacts[$i]['role'] = rtrim($contacts[$i]['role'], ';');
            }

            if(in_array('role_id', $export_fields))
            {
                $contacts[$i]['role_id'] = '';

                $role_ids = $this->contacts_model->get_contact_roles($id);
                foreach($role_ids as $role_id)
                {
                    $contacts[$i]['role_id'] .= $role_id['id'].';';
                }

                $contacts[$i]['role_id'] = rtrim($contacts[$i]['role_id'], ';');
            }

            fputcsv($fh, $contacts[$i], ',');
        }
        fclose($fh);

        echo json_encode(true);
    }
}

1 个答案:

答案 0 :(得分:1)

内存怎么样?它可能最大化分配的内存并停止。