2012-01-26 1 views
1

ここでの目標は、ヘッダーを使用してブラウザにcsvファイルをダウンロードさせることです。まだ何らかの理由でブラウザが現在のページのHTMLコンテンツをダウンロードしているようです(ではなく、)。私は私が読んだ多くの記事の指示/ SOの質問に続いて、私はこのコードで何が間違って表示されていない私が構築したcsvファイルではなく、実際のページコンテンツをダウンロードしているヘッダー

$arr1 = array(array("1","2","3","4"),array("2","1","6","6")); 

$tmp_handle = fopen('php://memory', 'r+'); 
fputcsv($tmp_handle, $arr1); 

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

rewind($tmp_handle); 
echo stream_get_contents($tmp_handle); 

:ここ

は、私が使用してきたコードです。

私はここに得ることができる任意のヘルプに感謝します!ここで

は(要望に応じて)完全なコードです:

<?php 
global $wpdb; 

// Get total number of active referrers 
$referrer_check = $wpdb->get_results("SELECT * FROM ".$wpdb->prefix."referrer"); 
$num_of_referrers = 0; 

foreach ($referrer_check as $check) 
{ 
$num_of_referrers++; 
} 

// Get total number of referral transactions 
$num_of_referrals = 0; 
$num_referral_check = $wpdb->get_results("SELECT * FROM ".$wpdb->prefix."referrer_transactions"); 
foreach ($num_referral_check as $check) 
{ 
$num_of_referrals++; 
} 

// Check for the top referrer 
$top_referrer = $wpdb->get_row("SELECT referrer_id, count(*) as row_count FROM ".$wpdb->prefix."referrer_transactions GROUP BY referrer_id ORDER BY COUNT(*) DESC"); 
$top_referrer_result = $wpdb->get_row("SELECT * FROM ".$wpdb->prefix."referrer WHERE referrer_id = $top_referrer->referrer_id"); 

// Construct the table 

// Create array for second table 
$ref_transactions_table_arr = array(
array("Referee Name", "Referee ID", "Referee Sign Up", "Referee Email","Referrer ID","Referrer Name")); 

foreach ($num_referral_check as $check) 
{ 
$ref_transactions_table_arr[] = array(
$wpdb->get_var("SELECT billing_name FROM ".$wpdb->prefix."pmpro_membership_orders WHERE user_id = $check->buyer_id"), 
$check->buyer_id, 
$wpdb->get_var("SELECT user_registered FROM ".$wpdb->prefix."users WHERE ID = $check->buyer_id"), 
$wpdb->get_var("SELECT user_email FROM ".$wpdb->prefix."users WHERE ID = $check->buyer_id"), 
$wpdb->get_var("SELECT referrer_id FROM ".$wpdb->prefix."referrer WHERE referrer_id = $check->referrer_id"), 
$wpdb->get_var("SELECT referrer_name FROM ".$wpdb->prefix."referrer WHERE referrer_id = $check->referrer_id") 
); 
} 

// Create array for first table 
$active_ref_table_arr = array(
array('Referrer Name', 'Referrer ID', '# of Referrals', 'Address','Referrer Email','Lifetime Referrals')); 

foreach ($referrer_check as $check) 
{ 
$active_ref_table_arr[] = array(
$check->referrer_name, 
$check->referrer_id, 
$wpdb->get_var("SELECT count(*) FROM ".$wpdb->prefix."referrer_transactions WHERE referrer_id = $check->referrer_id"), 
$check->referrer_street . " " . $check->referrer_city . ", " . $check->referrer_state . " " . $check->referrer_zip, 
$wpdb->get_var("SELECT user_email FROM ".$wpdb->prefix."users WHERE ID= $check->referrer_id"), 
$wpdb->get_var("SELECT count(*) FROM ".$wpdb->prefix."referrer_transactions WHERE referrer_id = $check->referrer_id") 
); 
} 

// Download file 
if(isset($_POST['export_tbl_one'])) 
{ 
$csvData = array(
    array("1","2","3","4"), 
    array("2","1","6","6") 
); 

$fp = fopen('php://memory', 'w+'); 

/*foreach ($csvData as $row) { 
    fputcsv($fp, $row); 
}*/ 

fputcsv($fp,$csvData); 

rewind($fp); 
$csvFile = stream_get_contents($fp); 
fclose($fp); 

header('Content-Type: text/csv'); 
header('Content-Length: '.strlen($csvFile)); 
header('Content-Disposition: attachment; filename="file.csv"'); 

exit($csvFile); 
} 

?> 
<div class="nav"> 
     <ul> 
       <li class="first"><a href="#">Total Referrers: <? echo $num_of_referrers; ?></a></li> 
       <li><a href="#">Total Referals: <? echo $num_of_referrals; ?></a></li> 
       <li><a href="#">Top Referrer: <? echo $top_referrer->referrer_id . ", " . $top_referrer_result->referrer_name . "(" . $top_referrer->row_count . ")"; ?></a></li> 
<li> 
<form method="POST" action="http://keepmecertified.com/acp"> 
<input type="submit" value="click me" name="export_tbl_one"/> 
</form> 

</li> 
     </ul> 
</div> 

<br> 

<table class="table"> 
<caption>Referrer Transactions</caption> 
<? 
$num = 0; 

foreach($ref_transactions_table_arr as $fields) 
{ 

    echo "<tr>"; 


    foreach($fields as $data) 
    { 

     if($num == 0) 
     { 
     echo "<th class=\"ref_head\">$data</th>"; 
     } 
     else 
     { 
     echo "<td>$data</td>"; 
     } 

    } 


    echo "</tr>"; 

    if($num == 0) 
    { 
    $num++; 
    } 


} 

?> 
</table> 

<table class="table"> 
<caption>Active Referrers</caption> 
<? 
$num = 0; 

foreach($active_ref_table_arr as $fields) 
{ 

    echo "<tr>"; 


    foreach($fields as $data) 
    { 

     if($num == 0) 
     { 
     echo "<th class=\"ref_head\">$data</th>"; 
     } 
     else 
     { 
     echo "<td>$data</td>"; 
     } 

    } 


    echo "</tr>"; 

    if($num == 0) 
    { 
    $num++; 
    } 


} 

?> 
</table> 
+0

私はあなたのスニペットを試してみましたが、それが動作します(CSV部分は配列、配列です)。より多くのHTMLコンテンツがある場合は、スニペット全体を表示していません。 – Gregor

+0

これはWordPressスクリプトの一部ですので、このスクリプトの前に何かがうんざりしているのではないかと思います。 –

答えて

2

は、このコードを試してみてください。

$csvData = array(
    array("1","2","3","4"), 
    array("2","1","6","6") 
); 

$fp = fopen('php://memory', 'w+'); 
foreach ($csvData as $row) { 
    fputcsv($fp, $row); 
} 

rewind($fp); 
$csvFile = stream_get_contents($fp); 
fclose($fp); 

header('Content-Type: text/csv'); 
header('Content-Length: '.strlen($csvFile)); 
header('Content-Disposition: attachment; filename="file.csv"'); 

exit($csvFile); 

私はあなたのコードは、結果あなたを生成しないとしてCSVを構築するために、データをループしています期待する。出力する前にファイルを文字列として取得しました。これはContent-Lengthヘッダーを追加するのはちょっと面倒です。私はまた、このコードが出力された後に、より多くのコードが防止され、HTMLが実行されないようにするために、データを出力するために重要なビット(exit)を持っています。

あなたはこのコードを使用して、まだ問題がある場合は、コードが呼び出されていない - 。あなたは、このコードはに包まれている任意のif文などをチェックする必要があります

+0

このコードを使用すると、csvには次のものしか含まれません。 '<!DOCTYPE HT ' ちなみに、CSVファイル***がダウンロードされているため、コードを呼び出す必要があります。 –

+0

csvファイル出力の前に出力が行われないことは非常に重要です。 wordpress plugin php全体へのリンクを投稿してください。 – Gregor

+0

私は問題が何であるかを伝えることができますが、**完全なスクリプト**を追加して、それを特定する必要があります。私が追加した 'Content-Length'ヘッダのためにあなたはその結果を得ています。 – DaveRandom

関連する問題