[英]Export CSV file from Codeigniter
我在幫助程序中使用csv_helper.php文件進行導出。 它從mysql獲取結果,但僅顯示結果而不是下載! 這是csv_helper
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
if ( ! function_exists('array_to_csv'))
{
function array_to_csv($array, $download = "")
{
if ($download != "")
{
header('Content-Type: application/csv');
header('Content-Disposition: attachment; filename="' . $download . '"');
}
ob_start();
$f = fopen('php://output', 'w') or show_error("Can't open php://output");
$n = 0;
foreach ($array as $line)
{
$n++;
if ( ! fputcsv($f, $line))
{
show_error("Can't write line $n: $line");
}
}
fclose($f) or show_error("Can't close php://output");
$str = ob_get_contents();
ob_end_clean();
if ($download == "")
{
return $str;
}
else
{
echo $str;
}
}
}
if ( ! function_exists('query_to_csv'))
{
function query_to_csv($query, $headers = TRUE, $download = "")
{
if ( ! is_object($query) OR ! method_exists($query, 'list_fields'))
{
show_error('invalid query');
}
$array = array();
if ($headers)
{
$line = array();
foreach ($query->list_fields() as $name)
{
$line[] = $name;
}
$array[] = $line;
}
foreach ($query->result_array() as $row)
{
$line = array();
foreach ($row as $item)
{
$line[] = $item;
}
$array[] = $line;
}
echo array_to_csv($array, $download);
}
}
這是控制器功能:
public function exportUser() {
$this->load->database();
$query = $this->db->get('user');
$this->load->helper('csv');
query_to_csv($query, TRUE, 'toto.csv');
}
然后在視圖頁面中顯示結果:user_id,user_name,user_email,user_pass,user_phone,user_country,user_city,user_zip,user_address,user_type,user_status 53,abcdef,abcd @ yahoo.com,12,1,,0 ,, ,學生,1 54,aws,abc @ yahoo.com,12,12,阿富汗,卡皮薩,“資源人”,0 55,onti,ontika @ ya.com,12,12,0 ,,” “ Registered User”,1,56,edf,df @ abc.com,12,12,阿爾巴尼亞,Bulqize ,, dewde,“管理員用戶”,1 58,meena,meena @ abc.com,“,”,“已注冊”用戶”,0 61,nisat,nisat @ abc.com,“,”,“注冊用戶”,0
但不能下載! 嘗試過Chrome和mozilla都...。
該怎么辦???
先感謝您 !
嘗試修改array_to_csv()函數中的標頭:
// Disable caching
$time = gmdate('D, d M Y H:i:s');
header('Expires: Tue, 03 Jul 2001 06:00:00 GMT');
header('Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate');
header('Last-Modified: ' . $time . ' GMT');
// Force download
header('Content-Type: application/force-download');
header('Content-Type: application/octet-stream');
header('Content-Type: application/download');
// Set encoding
header('Content-Disposition: attachment;filename=' . $download);
header('Content-Transfer-Encoding: binary');
然后在輸出部分之后,添加一個出口:
if ($download == "")
{
return $str;
}
else
{
echo $str;
}
exit;
或者嘗試使用CodeIgniter的內置函數:
public function exportUser() {
// Load database and query
$this->load->database();
$query = $this->db->get('user');
// Load database utility class
$this->load->dbutil();
// Create CSV output
$data = $this->dbutil->csv_from_result($query);
// Load download helper
$this->load->helper('download');
// Stream download
force_download('toto.csv', $data);
}
謝謝,
安德魯
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.