MySQLへのCSVエクスポートでHTMLを取得するのはなぜですか?
質問
この質問は以前に尋ねられたことは知っていますが、問題に遭遇しました。
奇妙なことに、この関数を実行すると、関数を実行するために選択したリンクのページのhtmlが含まれます。
function exportCSV($table) {
$result = mysql_query("SHOW COLUMNS FROM ".$table."");
$i = 0;
if (mysql_num_rows($result) > 0) {
while ($row = mysql_fetch_assoc($result)) {
$csv_output .= $row['Field']."; ";
$i++;
}
}
$csv_output .= "\n";
$values = mysql_query("SELECT * FROM ".$table."");
while ($rowr = mysql_fetch_row($values)) {
for ($j=0;$j<$i;$j++) {
$csv_output .= $rowr[$j]."; ";
}
$csv_output .= "\n";
}
$filename = $file."_".date("Y-m-d_H-i",time());
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: csv" . date("Y-m-d") . ".csv");
header( "Content-disposition: filename=".$filename.".csv");
print $csv_output;
exit;
}
csvファイルにHTMLを含める理由を誰もが知っていますか? 代替テキストhttp://i35.tinypic.com/16i9oxi.jpg
解決
私の推測では、要求されたページに関係なく、同じHTMLヘッダーとフッターを生成する何らかのテンプレートがあります。 exportCSV関数が呼び出される前に、ヘッダーが生成されます。
出力の下部は表示されませんが、関数が終了した後もフロー制御がそのコードに続くと思われるので、フッターもそこにあると思います。
他のヒント
phpは本当に私のものではありませんが、コンテンツを書き出す前に応答ストリームをクリアする必要があるようです。この関数に到達する前に、おそらく何か他のものがhtmlをストリームに書き出しているのでしょうか?テンプレートやマスターページ、またはその性質のようなものですか?
HTMLコンテンツは、典型的なヘッダー/ナビゲーションバーのように見えます。このルートで無効にする必要があるコンテンツが自動的に含まれている他の何かがある場合はどうなりますか?
どこかに制御フローの問題があります-デフォルトでは、CSVを生成するページを含むすべてのページに、HTMLのヘッド部分とナビゲーションが含まれているようです。 1つの解決策は、CSVリクエストをチェックすることです。その場合、htmlコードを含めないでください。別の解決策は、出力バッファリングを使用し、CSVデータを出力する直前に以前の出力をすべて破棄することです。
メソッドの開始時に、csv_output変数を空の文字列に初期化することをお勧めします。メソッド内のすべての操作は連結であるため、古いデータを持ち込む可能性があります。
潜在的に機密性の高いデータを世界中に公開していることを考慮してください。メールと番地を公開している人が何十人もいます。