Php Codeigniter中的vcard导出下载只工作一次
我希望我的用户选择多个联系人并以vcard格式导出其详细信息。这是我的控制器:Php Codeigniter中的vcard导出下载只工作一次,php,codeigniter,vcf-vcard,Php,Codeigniter,Vcf Vcard,我希望我的用户选择多个联系人并以vcard格式导出其详细信息。这是我的控制器: function get_contacts_email_vcard() { $this->load->library('vcard'); $datavcard = $this->getvcard($this->user_model->get_email_contacts
function get_contacts_email_vcard()
{
$this->load->library('vcard');
$datavcard = $this->getvcard($this->user_model->get_email_contacts());
}
function getvcard($dat)
{
$datavcarddata = array();
foreach($dat as $data){
$datavcarddata['display_name'] = $data->name;
$datavcarddata['cell_tel'] = $data->mobile_no;
$datavcarddata['email1'] = $data->email;
if (is_array($datavcarddata))
{
$this->vcard->vcard($datavcarddata);
}
else
{
$this->vcard->vcard();
}
$this->vcard->zipdownload();
}
return $datavcarddata;
}
我的看法是:
<li><a href="<?php echo base_url(); ?>auth/get_contacts_email_vcard">vCard(Address Book)</a></li>
我面临的问题是,这种方法只适用一次。只有我数据库中最后一个联系人的数据才能下载到zip文件中。我想为不同的联系人创建不同的zip文件或vcf文件。我还想创建一个包含所有vcf文件的zip文件。好的,经过大量研究,我发现一次单击事件(或任何其他事件)只能向浏览器发送一个下载请求。因此不可能下载多个vCard
$this->db->select('*');
$this->db->select('*');
$this->db->from('tblname');
$info = $this->db->get()->result();
$userContacts = new stdClass();
$userContacts->data = $info;
$dataArray = '';
foreach($userContacts as $contact)
{
for($i=0; $i<sizeof($contact);$i++)
{
$first_name = $contact[$i]->name;
$last_name = '';
$mobile_number = $contact[$i]->mobile;
$email_address= '';
$dataArray .="BEGIN:VCARD\nN:$first_name;$last_name\nFN:$first_name\nTEL;TYPE=WORK,MSG:$mobile_number\nEMAIL;TYPE=INTERNET:$email_address\nEND:VCARD\n";
}
}
$data = $dataArray;
$size = strlen($data);
$filename = "Restaurants.vcf";
header("Content-Type: application/octet-stream");
header("Content-Length: $size");
header("Content-Disposition: attachment; filename=\"$filename\"");
header("Content-Transfer-Encoding: binary");
$this->db->from('tblname');
$info=$this->db->get()->result();
$userContacts=new stdClass();
$userContacts->data=$info;
$dataArray='';
foreach($userContacts作为$contact)
{
对于($i=0;$iname;
$last_name='';
$mobile_number=$contact[$i]->mobile;
$email_address='';
$dataArray.=“开始:VCARD\nN:$first\u name;$last\u name\nFN:$first\u name\nTEL;TYPE=WORK,MSG:$mobile\u number\nEMAIL;TYPE=INTERNET:$email\u address\nEND:VCARD\n”;
}
}
$data=$dataArray;
$size=strlen($data);
$filename=“Restaurants.vcf”;
标题(“内容类型:应用程序/八位字节流”);
标题(“内容长度:$size”);
标题(“内容处置:附件;文件名=\”$filename\”);
标题(“内容传输编码:二进制”);
我不知道vcard库是如何工作的,但if看起来似乎是罪魁祸首。它是否有任何方法可以返回vcard数据,以便您可以将其放入一个数组并将所有卡片压缩在一起?感谢您的回答。我不确定。我尝试创建一个数组并压缩它,但它不起作用。我使用过这个库:任何可以n解决我的问题:-(
$this->db->select('*');
$this->db->from('tblname');
$info = $this->db->get()->result();
$userContacts = new stdClass();
$userContacts->data = $info;
$dataArray = '';
foreach($userContacts as $contact)
{
for($i=0; $i<sizeof($contact);$i++)
{
$first_name = $contact[$i]->name;
$last_name = '';
$mobile_number = $contact[$i]->mobile;
$email_address= '';
$dataArray .="BEGIN:VCARD\nN:$first_name;$last_name\nFN:$first_name\nTEL;TYPE=WORK,MSG:$mobile_number\nEMAIL;TYPE=INTERNET:$email_address\nEND:VCARD\n";
}
}
$data = $dataArray;
$size = strlen($data);
$filename = "Restaurants.vcf";
header("Content-Type: application/octet-stream");
header("Content-Length: $size");
header("Content-Disposition: attachment; filename=\"$filename\"");
header("Content-Transfer-Encoding: binary");