質問編集履歴
2
Content-Typeは最終的にこうした。
title
CHANGED
File without changes
|
body
CHANGED
@@ -49,7 +49,7 @@
|
|
49
49
|
stream_filter_append($fp, "encodeFilter");
|
50
50
|
|
51
51
|
// ダウンロードさせる
|
52
|
-
header("Content-Type:
|
52
|
+
header("Content-Type: application/octet-stream");
|
53
53
|
header("Content-Disposition: attachment; filename=".$this->filename);
|
54
54
|
|
55
55
|
// 検索結果を書き込む
|
1
解決方法を追記。
title
CHANGED
File without changes
|
body
CHANGED
@@ -29,4 +29,67 @@
|
|
29
29
|
|
30
30
|
exit;
|
31
31
|
}
|
32
|
-
```
|
32
|
+
```
|
33
|
+
|
34
|
+
---
|
35
|
+
|
36
|
+
解決できましたので、実装を追記しておきます。
|
37
|
+
|
38
|
+
**修正したメソッド**
|
39
|
+
```PHP
|
40
|
+
public function export($results){
|
41
|
+
// フィルタを登録
|
42
|
+
stream_filter_register("eolFilter", "eol_filter");
|
43
|
+
stream_filter_register("encodeFilter", "encode_filter");
|
44
|
+
|
45
|
+
$fp = fopen('php://output', 'w');
|
46
|
+
|
47
|
+
// フィルタを開いたストリームに付加する
|
48
|
+
stream_filter_append($fp, "eolFilter");
|
49
|
+
stream_filter_append($fp, "encodeFilter");
|
50
|
+
|
51
|
+
// ダウンロードさせる
|
52
|
+
header("Content-Type: text/csv");
|
53
|
+
header("Content-Disposition: attachment; filename=".$this->filename);
|
54
|
+
|
55
|
+
// 検索結果を書き込む
|
56
|
+
foreach ($results as $data) {
|
57
|
+
fputcsv($fp, $data);
|
58
|
+
}
|
59
|
+
|
60
|
+
fclose($fp);
|
61
|
+
}
|
62
|
+
```
|
63
|
+
|
64
|
+
**作成したフィルタクラス**
|
65
|
+
|
66
|
+
```PHP
|
67
|
+
// 改行コードをPHP_EOLからCR+LFに置換するフィルタ
|
68
|
+
class eol_filter extends php_user_filter {
|
69
|
+
function filter($in, $out, &$consumed, $closing) {
|
70
|
+
while ($bucket = stream_bucket_make_writeable($in)) {
|
71
|
+
$bucket->data = str_replace(PHP_EOL, "\r\n", $bucket->data);
|
72
|
+
$consumed += $bucket->datalen;
|
73
|
+
stream_bucket_append($out, $bucket);
|
74
|
+
}
|
75
|
+
return PSFS_PASS_ON;
|
76
|
+
}
|
77
|
+
}
|
78
|
+
|
79
|
+
// 文字コードをUTF-8からShift-JISに置換するフィルタ
|
80
|
+
class encode_filter extends php_user_filter {
|
81
|
+
function filter($in, $out, &$consumed, $closing) {
|
82
|
+
while ($bucket = stream_bucket_make_writeable($in)) {
|
83
|
+
$bucket->data = mb_convert_encoding($bucket->data, 'SJIS-win', 'UTF-8');
|
84
|
+
$consumed += $bucket->datalen;
|
85
|
+
stream_bucket_append($out, $bucket);
|
86
|
+
}
|
87
|
+
return PSFS_PASS_ON;
|
88
|
+
}
|
89
|
+
}
|
90
|
+
```
|
91
|
+
|
92
|
+
参考ページ
|
93
|
+
- [http://d.hatena.ne.jp/omoon/20110527/1306475827](http://d.hatena.ne.jp/omoon/20110527/1306475827)
|
94
|
+
- [http://php.net/manual/ja/function.stream-filter-register.php](http://php.net/manual/ja/function.stream-filter-register.php)
|
95
|
+
- [http://php.net/manual/ja/function.stream-filter-append.php](http://php.net/manual/ja/function.stream-filter-append.php)
|