2013-03-19 39 views
26

Tôi muốn tạo tệp csv, nhưng khi tôi chạy mã, nó trả về trang ngân hàng và không có tệp csv. Tôi sử dụng PHP 5. Tôi sử dụng mã sau:Tạo tệp csv bằng php

<?php 
    $data = array ('aaa,bbb,ccc,dddd', 
        '123,456,789', 
        '"aaa","bbb"'); 

    $fp = fopen('data.csv', 'w'); 
    foreach($data as $line){ 
      $val = explode(",",$line); 
      fputcsv($fp, $val); 
    } 
    fclose($fp); 
?> 

Cảm ơn bạn!

+1

Bạn cần 'echo' đầu ra sau' fclose ($ fp); ' –

+0

Bạn không phải' echoing' bất cứ thứ gì, do đó trang sẽ chỉ trống. Nó sẽ chỉ tạo ra csv cho bạn theo mã của bạn. – Rikesh

Trả lời

56

Trống vì bạn đang viết thư đến file. bạn nên viết thư tới output bằng cách sử dụng php://output thay thế và cũng gửi thông tin tiêu đề để biểu thị csv của nó.

Ví dụ

header('Content-Type: application/excel'); 
header('Content-Disposition: attachment; filename="sample.csv"'); 
$data = array(
     'aaa,bbb,ccc,dddd', 
     '123,456,789', 
     '"aaa","bbb"' 
); 

$fp = fopen('php://output', 'w'); 
foreach ($data as $line) { 
    $val = explode(",", $line); 
    fputcsv($fp, $val); 
} 
fclose($fp); 
+5

Loại nội dung phải là văn bản/csv không phải là ứng dụng/excel – Scott

19

@ câu trả lời Baba là tuyệt vời. Nhưng tại sao sử dụng explode làm fputscv lấy mảng làm tham số?

Ví dụ, nếu bạn có một ba cột, bốn dòng văn bản, đây là một phiên bản thẳng hơn:

header('Content-Type: application/excel'); 
header('Content-Disposition: attachment; filename="sample.csv"'); 

$user_CSV[0] = array('first_name', 'last_name', 'age'); 

// very simple to increment with i++ if looping through a database result 
$user_CSV[1] = array('Quentin', 'Del Viento', 34); 
$user_CSV[2] = array('Antoine', 'Del Torro', 55); 
$user_CSV[3] = array('Arthur', 'Vincente', 15); 

$fp = fopen('php://output', 'w'); 
foreach ($user_CSV as $line) { 
    // though CSV stands for "comma separated value" 
    // in many countries (including France) separator is ";" 
    fputcsv($fp, $line, ','); 
} 
fclose($fp); 
+1

Tốt. Không phải là Content-Type là text/csv? – Adam

+0

Chắc chắn, điều đó sẽ hoạt động và thậm chí có thể phù hợp hơn. Chi tiết khác [tại đây] (http://stackoverflow.com/questions/393647/response-content-type-as-csv) – Buzut

0

tôi hy vọng ví dụ sẽ hữu ích cho bạn

$data= "Sr. No.,Vendor Name,Cargo Type,Amount,Delivery Address,Pickup Time,Delivery Time\n"; 

     $i = 1; 
     if(!empty($detail)) { 
      foreach ($detail as $list) { 

       $data .= $i.","; 
       $data .= any data 
       $data .= any data 
       $data .= any data 
       $data .= any data 
       $data .= any data 
       $data .= any data 
       $data .="\n"; 
       $i++; 

      } 
     } 

     header("Content-Type: application/csv"); 
     $csv_filename = 'anyfilename.xlsx'; 
     header("Content-Disposition:attachment;filename=".$csv_filename); 
     $fd = fopen ($csv_filename, "w"); 
     fputs($fd,$data); 
     fclose($fd); 
     echo $data; 
     die();