PHP導出MySQL數據到Excel文件

openkk 12年前發布 | 1K 次閱讀 MapDB LimeSurvey

經常會碰到需要從數據庫中導出數據到Excel文件,用一些開源的類庫,比如PHPExcel,確實比較容易實現,但對大量數據的支持很不好,很容易到達PHP內存使用上限。這里的方法是利用fputcsv寫CSV文件的方法,直接向瀏覽器輸出Excel文件。

  // 輸出Excel文件頭,可把user.csv換成你要的文件名

  header('Content-Type: application/vnd.ms-excel');

  header('Content-Disposition: attachment;filename="user.csv"');

  header('Cache-Control: max-age=0');

  // 從數據庫中獲取數據,為了節省內存,不要把數據一次性讀到內存,從句柄中一行一行讀即可

  $sql = 'select * from tbl where ……';

  $stmt = $db->query($sql);

  // 打開PHP文件句柄,php://output 表示直接輸出到瀏覽器

  $fp = fopen('php://output', 'a');

  // 輸出Excel列名信息

  $head = array('姓名', '性別', '年齡', 'Email', '電話', '……');

  foreach ($head as $i => $v) {

  // CSV的Excel支持GBK編碼,一定要轉換,否則亂碼

  $head[$i] = iconv('utf-8', 'gbk', $v);

  }

  // 將數據通過fputcsv寫到文件句柄

  fputcsv($fp, $head);

  // 計數器

  $cnt = 0;

  // 每隔$limit行,刷新一下輸出buffer,不要太大,也不要太小

  $limit = 100000;

  // 逐行取出數據,不浪費內存

  while ($row = $stmt->fetch(Zend_Db::FETCH_NUM)) {

  $cnt ++;

  if ($limit == $cnt) { //刷新一下輸出buffer,防止由于數據過多造成問題

  ob_flush();

  flush();

  $cnt = 0;

  }

  foreach ($row as $i => $v) {

  $row[$i] = iconv('utf-8', 'gbk', $v);

  }

  fputcsv($fp, $row);

  }</pre>

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!