2013-03-19 3 views
26

CSV 파일을 만들고 싶지만 코드를 실행하면 은행 페이지와 CSV 파일이 반환됩니다.PHP로 CSV 파일 만들기

<?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); 
?> 

감사합니다 : 나는 PHP 5 나는 다음과 같은 코드를 사용을 사용!

+1

유용 할 것입니다 희망 : 당신은 세 개의 열이있는 경우 예를 들어

는 네 줄의 문서는 여기에 더 직선 버전입니다 'fclose ($ fp); 뒤에 출력을'echo' 할 필요가있다. –

+0

'echoing'이 없으므로 페이지는 공백으로 만 남을 것이다. 코드에 따라 CSV를 생성합니다. – Rikesh

답변

56

file에 쓰고 있기 때문에 비워 둡니다. 대신 php://output을 사용하여 output에 쓰고 csv를 나타내는 헤더 정보를 보내야합니다. 바바의 대답 @

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

Content-Type은 text/csv가 아니어야합니다. application/excel – Scott

19

은 중대하다. 하지만 explodefputscv으로 사용하는 이유는 매개 변수로 배열을 사용하기 때문입니다.

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

Nice. Content-Type이 text/csv가 아니어야합니까? – Adam

+0

확실히, 그게 효과가 있고 더 적절할 수도 있습니다. 자세한 내용 [여기] (http://stackoverflow.com/questions/393647/response-content-type-as-csv) – Buzut

0

내가 예를 들어 당신

$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();