2013-05-17 4 views
3
<?php 

$filename="backup_".date('m/d/Y', time()).".csv"; 

header('Content-Type: text/csv; charset=utf-8'); 
header('Content-Disposition: attachment;filename="'.$filename.'"'); 
header('Cache-Control: max-age=0'); 

$q=mysqli_query($conn,"SELECT * FROM visitordb"); 
$file = fopen('php://output','w'); 
if(mysqli_num_rows($q)>0) { 
    while($res = $q->fetch_assoc()) { 
     $datas = $res["sno"].','.$res["UDID"].','.$res["taggnumber"].','.$res["name"].','.$res["designation"].','.$res["company"].','.$res["email"]; 
     fputcsv($file, explode(',', $datas)); 
    } 
} else { 

} 

fclose($file); 
} 

위의 코드는 ms Excel에서 볼 때 .csv 파일의 시작 부분에 빈 줄을 생성합니다. 한 가지 더 .csv 파일은 페이지의 HTML 코드도 생성합니다.fputcsv .csv 시작 부분에 빈 행 삽입

+0

확인 다른 스크립트의 출력, 종료 후이 없는지 확인 closing $ file –

+0

Excel에 의존하여 CSV의 모양을 알려주지 마십시오. .csv는 어떤 모습입니까?! – deceze

+0

파일을 디스크에 저장하고 처음에 빈 줄이 있는지 확인하십시오. –

답변

3

헤더 지시문을 제거하면 어떻게됩니까? 머리글은 정의에 따라 새 줄로 끝나야한다는 것을 알아야합니다. 이것이 상상할 수있는 \ n 대 충돌 \ r \ n 충돌입니다. 모든 것이 실패하면

, 버퍼에 전체 출력을 얻을 나중에 트림 :

ob_start(); 
...your code... 
$out = ob_get_contents(); 
ob_end_clean(); 
echo trim($out); 

안부

Zsolt

+0

감사합니다 !!! 이것은 훌륭하게 작동했다 !! – warelord

+0

당신을 진심으로 환영합니다. 트림 또한 뒤쪽 공백을 제거합니다. csv를 100 % 안전하게 유지해야하는 경우 다른 문자열 조작을 사용하십시오. –

+0

@Zsolt Szilagy köszönöm. 나는 같은 문제가 있었고 헤더 지시문이 새로운 라인을 추가하고 있다는 것을 몰랐다. 필자의 경우 임시 파일 (php의 tmpfile())에 출력 결과를 썼기 때문에 ob_end_clean() 만 수행하면된다. 전에 내 파일을 반복하고 echo'ing. – BryanT