はじめて質問させていただきます。
PHP5.3.3で、以下の問題で悩んでいます。
ZIPファイルの中に3つのCSVが入っているという形で、
CSV形式のデータをファイル出力させたいと思っています。
実行すると、それがサーバ上の\temp のフォルダに出てしまうのですが、
そこには出さずに、このソースにアクセスしたクライアント側でだけ
出力が行われるようにしたいのです。しかしそのようにできません。
【手順】
①3つの配列変数をfputs()でサーバに書き込みます。
②ZipArchiveクラスのオブジェクトを作成します。
③header()でダウンロードダイアログを開きファイル出力を行います。
※②③についてはソースは以下のようになっています。
php
1 $category = array(1 => 'ステートメント', 2 => 'ポジション', 3 => '全口座'); 2 $csv_filename1 = 'temp/'."$str_csv_subject_sub".'('."$category[1]".')'.'.csv'; 3 $csv_filename2 = 'temp/'."$str_csv_subject_sub".'('."$category[2]".')'.'.csv'; 4 $csv_filename3 = 'temp/'."$str_csv_subject_sub".'('."$category[3]".')'.'.csv'; 5 $files = array(mb_convert_encoding($csv_filename1,"SJIS-win","UTF-8"), mb_convert_encoding($csv_filename2,"SJIS-win","UTF-8"), mb_convert_encoding($csv_filename3,"SJIS-win","UTF-8")); 6 $zip_filename = 'temp/'."$str_csv_subject_sub".'.zip'; 7 8 //■ZipArchiveクラスの使用■ 9 $zip = new ZipArchive(); 10 $res = $zip->open("$zip_filename", ZipArchive::CREATE); 11 12 if($res === true) 13 { 14 foreach($files as $file) 15 { 16 $zip->addFile($file); 17 } 18 $zip->close(); 19 } 20 else 21 { 22 echo 'Error Code: ' . $res; 23 } 24 25 //■ZIPファイル出力ウィンドウ表示■ 26 $file = $zip_filename; 27 28 header('Content-Type: application/octet-stream'); 29 header(sprintf('Content-Disposition: attachment; filename="%s"', basename($file)) ); 30 header(sprintf('Content-Length: %d', filesize($file)) ); 31 readfile($file);
すると、このindex.php のソースの直下の\temp のフォルダの中に
ZIPファイル1つとCSVファイル3つが出力されます。
$csv_filename1~3 や$zip_filename の先頭の'temp/'を外しても、
同じ場所、\temp のフォルダの中に出てきます。
解決案として、配列変数をサーバに書き込まず、
直接CSVファイルとしてダウンロードするという方法が可能です。
しかし、HTTPレスポンスはサーバからクライアントに
1回しか返せないため、「3つの」CSVファイルを出力できません。
その方法だと1つのファイルしか出力できません。
どうすれば、クライアント側だけに、3つのCSVファイルを出力できるでしょうか。
私の基本的な理解が不足しているところがありましたらすみません。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/10 07:53
2015/11/10 08:12
2015/11/10 08:15
2015/11/10 08:27
2015/11/10 09:05
2015/11/11 06:23
2015/11/11 08:11
2015/11/11 08:52
2015/11/11 09:24
2015/11/11 09:34
2015/11/12 08:44