2012-07-01 3 views
1

다른 StackOverflow 질문에서 MySQL 데이터로 CSV 파일을 만드는 방법을 배웠습니다. 내 문제는 어떤 이유로이 코드를 호출 할 때 index.php (현재 페이지)이라는 파일을 저장하려고 시도하는 것입니다. index.php 파일에는 테이블의 데이터가 쉼표로 구분되어 있습니다. 나는 어딘가에 작은 오타가 있다고 생각하지만 코드를 가지고 노는 후에 그것을 발견 할 수 없다. 도움을 줄 수있는 사람에게 감사드립니다.PHP에서 생성 된 CSV 파일이 PHP 파일로 저장됩니다.

$result=mysql_query("SELECT * from tbl_email"); 
if(mysql_num_rows($result)) { 
    header ("Content-type: application/csv Content-Disposition:\"inline; filename=messages.csv\""); 
    echo "REF #,Company,Name,Email,Message,Date\n"; 
    while($row = mysql_fetch_row($result)) { 
    $companyname = mysql_query("SELECT company FROM tbl_users WHERE user_id ='$row[1]'"); 
    $datname = mysql_fetch_array($companyname); 
    echo"$row[7],$datname[company],$row[2],$row[4],$row[5],$row[6]\n"; 
    } 
    die(); 
} 

답변

3

당신은 오히려 한 줄에 여러 개의 헤더를 제공 한 전화보다 통화 header() 다수해야하고, 나는 CSV에 가장 적합한 MIME 형식이 text/csv 믿습니다.

header("Content-type: text/csv"); 
header("Content-Disposition: inline; filename=messages.csv"); 

더 일반적으로는 Content-Disposition: attachment을 사용하여 다운로드를 강제합니다.

header("Content-type: text/csv"); 
header("Content-Disposition: attachment; filename=messages.csv"); 
+0

그 트릭을 했어! 감사. 호기심에서 벗어난 이유가 있습니까? – user1470755

+0

@ user1470755'header()'는 적절한 줄 바꿈 다음에 출력 스트림에 단일 헤더를 보냅니다. Content-Type과 Content-Disposition은 동일한 헤더의 두 부분이 아닌 두 개의 다른 헤더이므로 별도로 보내야합니다. –

+0

그건 의미가 있습니다. 지금 당장 나를 풀어주지 않으므로 몇 분 안에 답을 수락하겠습니다. – user1470755

0

그것은해야한다 : 파일 이름의 값은 큰 따옴표 제대로 이탈되지 않도록

header('Content-type: application/csv'); 
header('Content-Disposition: attachment; filename="messages.csv"'); 

알 수 있습니다. PHP에서 작은 따옴표를 사용하면 많은 문제를 줄일 수 있습니다. ;)

파일을 다운로드하려면 브라우저에 대해 자세히 알아 보려면 http://www.techcoil.com/blog/php-codes-to-tell-browsers-to-open-the-download-dialog-box-for-users-to-download-a-file/을 확인하십시오.