2009-07-28 4 views
4

을 보여주는 결과 PHP 수출 MySQL을 CSV에 - HTML

가 나는 PHP 페이지가 ... (그 날을 위해 적어도 일했다) 나는 이미이에 게시물을보고,하지만 정말 솔루션을 제공하지 않았다 그것은 몇 가지 기본 MySQL 쿼리를 수행하며 그 결과는 페이지에 표시됩니다. 나는이 과정에서 몇 가지 $ _GET 및 $ _SESSION 변수를 사용하고있다.

동일한 페이지에서 사용자가 "함수를 호출하여 CSV로 내보내기"할 수도 있습니다. 내보내기에서 반환 된 파일의 하단에는 CSV 결과가 있지만 내 페이지의 HTML (함수를 호출 함)이 포함되어 있습니다.

이제 페이지 상단에는 ob_start()가 있고 하단에는 ob_flush()가 있습니다. 그렇지 않으면 페이지로드시 "헤더를 수정할 수 없습니다 ..."오류가 발생합니다. 그래서, 내가 읽은 게시물에 제안 된대로 :

My guess is that you've got some sort of template that generates the same HTML header and footer regardless of the page that is requested. Sometime before the exportCSV function is called, the header is generated. 

You don't show the bottom of the output, but I'll bet the footer is there too, since I suspect the flow control will continue on to that code after the function exits." 

(http://stackoverflow.com/questions/207019/why-am-i-getting-html-in-my-mysql-export-to-csv/207046) 

아무도 내가 어떻게 이런 일이 일어나지 않도록 할 수있는 아이디어가 있습니까? 내 코드를 게시해야한다면 알려주세요.

고마워요!

편집 :

때 내 수출 함수를 호출하기 전에, 그것이 CSV 전에 모든 HTML를 제거한다() 위해서는 ob_end_clean 호출. csv로 결과 후에 그러나, 나는 여전히 ... 일부 HTML 닫는 태그를 얻고있다

fname lname MONTH WeekdayCount WeekendCount 
John Doe 8 1 0 
John Doe 7 3 2 
Jane Smith 7 3 2 
</div>    
    </div>   
</div>    

</body>     

</html>    

편집 :

이 문제는 CSV 내보내기 스크립트를 호출 한 후 exit()를 호출하여 해결되었습니다.

답변

8

csv 데이터를 출력하기 전에 ob_end_clean()을 호출 해 볼 수 있으며 이미 HTML로 인쇄 한 출력을 버려야합니다.

인쇄중인 나머지 페이지를 중지하기 위해 CSV 데이터를 출력 한 후 exit()를 호출 할 수 있습니다.

이것은 특히 좋은 접근 방식으로 보이지 않습니다. 헤더와 푸터가 기본적으로 포함되지 않은 csv를 출력하기 위해 별도의 PHP 스크립트를 사용할 수 없습니까?

+0

제안을 주셔서 감사합니다 내 편집을 참조하십시오. – littleK

+0

아, 나는 csv를 출력 한 후에 exit()를 호출하는 것을 잊어 버렸습니다. 그게 효과가 있었어! 고마워. ob_flush 및 ob_end_clean() 등을 사용해야한다는 것이 좋지 않습니까? – littleK

+0

CSV를 내보내는 실제 스크립트는 별도입니다. 하지만 기존 PHP 페이지에서 스크립트를 호출해야합니다. (HTML이 혼합 된 상태로) ... – littleK

2

스크립트를 보지 않고서는 ANY 콘텐츠를 보낸 후에 HTTP 헤더를 클라이언트에 보낼 수 없다고 말하는 것 이외의 문제가 무엇인지 말할 수 없습니다. 여기에는 공백이 포함됩니다. 때로는 개봉 전에 인쇄 할 수없는 문자가 표시됩니다. <?php 문. 필요한 경우 16 진수 편집기를 사용하십시오. 이 경우

<?php 
header('Content-Type: text/csv'); 
... 

:

당신의 export.php 스크립트의 상단은 같은 모양해야합니까?

+0

클리 터스, 없음이는 경우가 없었다. 하지만 난 그것을 추가하고 아무것도하지 않는 것 ... – littleK

0

나는 또한이 문제에 직면하여 이미 해결했다. 내 코드는 다음과 같습니다 아래

<html> 
<title> </title> 
<body> 
     <?php 
     ....Code which output MySQL to CSV 
     ?> 
</body></html> 

가 상단에 HTML 코드로 나올 CSV 파일의 예이다.

<html>      
<head>     
<meta http-equiv="Content-Language" content="th">     
<meta http-equiv="content-Type" content="text/html; charset=window-874">      
<meta http-equiv="content-Type" content="text/html; charset=tis-620">     

<title> Super Man </title>     

</head>      

<body bgcolor="#FFFFD4">      

<SQL rows resulted> 
xx5497 1/7/2015 1:03 SSFTM SSFTVM 35 Condition2 
xx5498 1/7/2015 1:04 SSDHN SSDHKN 13 Condition2 
xx5499 1/7/2015 1:06 SSFTM SSFTVM 14 Condition2 

실행 중 CSV 파일의 맨 위에 처음 12 줄이 있습니다.그것은 나에게 너무 미쳤어. PHP 코드를 맨 위로 이동하여 해결했습니다. 그런 다음 결과가 정상입니다. SQL 결과 만 CSV 파일에 출력되었습니다.

<?php 
    ....Code which output MySQL to CSV 
?> 

<html> 
<title> </title> 
<body> 

</body></html>