回答編集履歴

5

修正

2019/01/28 20:34

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -80,16 +80,6 @@
80
80
 
81
81
 
82
82
 
83
- // バッファリングを必ず解除する
84
-
85
- while (ob_get_level()) {
86
-
87
- ob_end_clean();
88
-
89
- }
90
-
91
-
92
-
93
83
  // ヘッダ出力
94
84
 
95
85
  header("Content-Type: text/csv; charset=Windows-31J");

4

修正

2019/01/28 20:34

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -49,8 +49,6 @@
49
49
  \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
50
50
 
51
51
  \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
52
-
53
- \PDO::ATTR_EMULATE_PREPARES => true,
54
52
 
55
53
  \PDO::ATTR_TIMEOUT => 10,
56
54
 

3

修正

2019/01/28 20:30

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -94,7 +94,7 @@
94
94
 
95
95
  // ヘッダ出力
96
96
 
97
- header("Content-Type: text/csv; charset=UTF-8");
97
+ header("Content-Type: text/csv; charset=Windows-31J");
98
98
 
99
99
  header("Content-Disposition: attachment; filename=export.tsv");
100
100
 
@@ -110,8 +110,6 @@
110
110
 
111
111
  // 見出しを書き込む
112
112
 
113
- fwrite($stream, "\xEF\xBB\xBF");
114
-
115
113
  fputcsv($stream, ["ID"]);
116
114
 
117
115
 

2

追記

2019/01/28 20:26

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -13,3 +13,115 @@
13
13
  - `php://temp` はテンポラリメモリ(書き込んだあと読み出さないなら何の意味もない)
14
14
 
15
15
  - `php://output` は mod_php や php-fpm におけるHTTPのボディパート出力(`echo` で出すのと同じ場所)
16
+
17
+
18
+
19
+ ----
20
+
21
+
22
+
23
+ 【追記】
24
+
25
+
26
+
27
+ これでお試しください↓
28
+
29
+
30
+
31
+ ```php
32
+
33
+ <?php
34
+
35
+
36
+
37
+ try {
38
+
39
+
40
+
41
+ $pdo = new PDO('mysql:dbname=test;host=IP;port=22;charset=utf8mb4',
42
+
43
+ 'root',
44
+
45
+ 'password',
46
+
47
+ [
48
+
49
+ \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
50
+
51
+ \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
52
+
53
+ \PDO::ATTR_EMULATE_PREPARES => true,
54
+
55
+ \PDO::ATTR_TIMEOUT => 10,
56
+
57
+ \PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => false,
58
+
59
+ ]
60
+
61
+ );
62
+
63
+
64
+
65
+ $stmt = $pdo->query("SELECT * FROM `log`");
66
+
67
+
68
+
69
+ } catch (\PDOException $e) {
70
+
71
+
72
+
73
+ // デバッグ用
74
+
75
+ header("Content-Type: text/plain; charset=UTF-8", true, 500);
76
+
77
+ exit($e->getMessage());
78
+
79
+
80
+
81
+ }
82
+
83
+
84
+
85
+ // バッファリングを必ず解除する
86
+
87
+ while (ob_get_level()) {
88
+
89
+ ob_end_clean();
90
+
91
+ }
92
+
93
+
94
+
95
+ // ヘッダ出力
96
+
97
+ header("Content-Type: text/csv; charset=UTF-8");
98
+
99
+ header("Content-Disposition: attachment; filename=export.tsv");
100
+
101
+
102
+
103
+ // ストリームの用意
104
+
105
+ $stream = fopen('php://output', 'wb');
106
+
107
+ stream_filter_prepend($stream, 'convert.iconv.utf-8/cp932');
108
+
109
+
110
+
111
+ // 見出しを書き込む
112
+
113
+ fwrite($stream, "\xEF\xBB\xBF");
114
+
115
+ fputcsv($stream, ["ID"]);
116
+
117
+
118
+
119
+ // 各行を書き込む
120
+
121
+ foreach ($stmt as $row) {
122
+
123
+ fputcsv($stream, [$row['id']]);
124
+
125
+ }
126
+
127
+ ```

1

追記

2019/01/28 20:25

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -12,4 +12,4 @@
12
12
 
13
13
  - `php://temp` はテンポラリメモリ(書き込んだあと読み出さないなら何の意味もない)
14
14
 
15
- - `php://output` は mod_php や php-fpm におけるHTTPのボディパート出力
15
+ - `php://output` は mod_php や php-fpm におけるHTTPのボディパート出力(`echo` で出すのと同じ場所)