PHPで生成したテキストファイルをダウンロード
PHPでMySQLデータベースからデータを取得してテキストファイルに出力し、それをダウンロードさせるプログラムを制作しています。
ただ、現在のやり方ではテキストファイル出力時の確認用にprintでページ内に表示させるものが、すべてダウンロードしてきたファイルに書き込まれてしまいます。
ダウンロード処理前に出力されて残っているテキストファイルは正常なので、ダウンロードの設定が悪いのだろうと思いますが、どう設定してやればいいのか分からない状態です。
以下ソース(テキストファイル生成部分などは省略します)
<?php
///////////////////////////////
//データベースからデータを取得
///////////////////////////////
//ファイルを書き込み専用で開く
$file = fopen("sample.txt", 'w');
///////////////////////////////
//printでデータを表示しながらファイルへ出力
///////////////////////////////
//ファイルをクローズ
fclose($file);
// MySQLに対する処理
$close_flag = mysql_close($link);
if ($close_flag){
print('<p>切断に成功しました。</p>');
}
download_file("sample.txt");
function download_file($tmp_file)
{
// ダウンロードさせるファイル名
//$tmp_file = "./sample.txt";
$j_file = "sample.txt";
$j_file = mb_convert_encoding($j_file, "SJIS", "UTF-8");
/* ファイルの存在確認 */
if (!file_exists($tmp_file)) {
die("Error: File(".$tmp_file.") does not exist");
}
/* オープンできるか確認 */
if (!($fp = fopen($tmp_file, "r"))) {
die("Error: Cannot open the file(".$tmp_file.")");
}
fclose($fp);
/* ファイルサイズの確認 */
if (($content_length = filesize($tmp_file)) == 0) {
die("Error: File size is 0.(".$tmp_file.")");
}
// ヘッダ
header("Content-Type: application/octet-stream");
// ダイアログボックスに表示するファイル名
header("Content-Disposition: attachment; filename=$j_file");
//表示するファイルサイズ
header("Content-Length: ".$content_length);
header('Pragma: no-cache');
header('Cache-Control: no-cache');
// 対象ファイルを出力する。
readfile($tmp_file);
exit;
}
?>
お礼
nora1962 さん、ありがとうございます。 早速、見て試してみます。