2013-04-17 7 views
0

데이터를 CSV로 내보내는 SQL 쿼리가 있습니다. 모든 데이터가 내보내기에서 특정 양보다 아래로 떨어질 때까지 제대로 작동합니다.fputcsv 내보낼 데이터가 없을 때 HTML 내보내기

이 임계 값 아래로 내려 가면 레코드가 내보내지고 페이지의 html이 나옵니다.

header.html에 문자를 추가하면 문제가 해결됩니다. 필자는 이것을 테스트하고 다시 테스트했는데, html 페이지의 텍스트의 한 문자는 전체 html을 내보내는 것과 레코드를 추출하는 것의 차이점입니다.

그것은 진실한 너무 이상한 소리, 나는 누군가가 비슷한 경험을하고 어디 있는지 또는 내가 여기에 붙여 넣기해야 내 코드의 특정 어떤 부분 말해 줄 수 바라고 : 여기

가 fputcsv 부분입니다 :

if(isset($_SESSION['query_file'])) 
{ 
$query = $_SESSION['query_file']; 
unset($_SESSION['query_file']); 

$stmt = $dbh->query($query); 

$results = $stmt->fetchAll(); 

$link = 'csv/'. Utils::rand_code(10).'.csv' ; 

$fp = fopen(SITE_ROOT.$link,'w'); 
$first_row = array(
    'Name', 
    'ID', 
    'Email', 
    'Response', 
    'Phone' 
); 

fputcsv($fp, $first_row); 

foreach($results as $key=>$value) 
{ 


    $array_add = array(
     $value['user_last_name'].''.$value['user_first_name'], 
     $value['user_id'],$value['user_email'],$value['user_response'], 
     $value['user_phone'] 
    ); 

    fputcsv($fp, $array_add); 

}; 

fclose($fp); 

header("Cache-Control: public"); 
header("Content-Description: File Transfer"); 
header("Content-Length: ". filesize(SITE_ROOT.$link).";"); 
header("Content-Disposition: attachment; filename=".$link); 
header("Content-Type: application/octet-stream; "); 
header("Content-Transfer-Encoding: binary"); 

readfile(SITE_ROOT.$link); 

unlink(SITE_ROOT.$link); 
} 

미리 감사드립니다.

+0

소리가 출력 버퍼링 문제와 유사합니다. 한 요청에 출력 형식을 혼합해서는 안됩니다. – Phil

답변

0

unlink(SITE_ROOT.$link);으로 전화를 걸어서 die();을 추가하면 페이지의 나머지 부분이 실행되지 않아서 HTML로 CSV가 손상되지 않습니다.

+0

감사합니다, 그것은 우아한 해결책이지만, html의 양이 출력에 미치는 영향에 대한 아이디어는 무엇입니까? – fairywings78

+0

아니요, 더 많은 코드가 없으면 잘 모르겠습니다. HTML이 항상 CSV에 추가 될 수 있지만 CSV 판독기에 쉼표 같은 특정 문자가 포함되어있을 때만 표시됩니다. –