質問編集履歴

11

誤字修正

2022/01/25 21:41

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- PHPでzipファイルのダウンロードがうまくできません(Iphoneのchrome)
1
+ PHPでzipファイルのダウンロードがうまくできません(文字化けがブラウザ上で表示される)
test CHANGED
@@ -1,12 +1,7 @@
1
- ### 追記 2022年1月17日 前提・実現したいこと
1
+ ### 前提・実現したいこと
2
- zipファイルをIphoneのchromeからダウンロードと解凍を出来るようにしたいです。
2
+ ダウンロードボタンを押すとzipファイルを作成してダウンロード出来るようにしたいです。
3
3
 
4
- 一応PCのchromeとsafariのブラウザからダウンロードをして解凍するまでまではできました。ただIphoneのchromeからダウンロードすると、ダウンロードはできるんですがファイル名に拡張子が含まれておらずダウンロードした後に.zipを付け足して解凍をしようとしても、ファイルが壊れているのか解凍ができません。
5
-
6
- ### ~~前提・実現したいこと~~(ここの部分は解決済み)
7
- ~~ダウンロードボタンを押すとzipファイルを作成してダウンロード出来るようにしたいです。~~
8
-
9
- ~~下記のコードだとzipファイル作成までは出来たのですが、その後にダウンロードが始まることはなくブラウザ上にzipの中身が文字化けして表示されるだけで何も動作しません。作成できたzipファイルを直接ダウンロードして解凍してみたのですが問題なく解凍できました。なのでダウンロード周りのコードが間違っているのかもしれません。~~
4
+ 下記のコードだとzipファイル作成までは出来たのですが、その後にダウンロードが始まることはなくブラウザ上にzipの中身が文字化けして表示されるだけで何も動作しません。作成できたzipファイルを直接ダウンロードして解凍してみたのですが問題なく解凍できました。なのでダウンロード周りのコードが間違っているのかもしれません。
10
5
 
11
6
  ### 該当のソースコード
12
7
  ```php

10

コード修正、実現したいこと修正

2022/01/16 23:24

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,7 +1,7 @@
1
1
  ### 追記 2022年1月17日 前提・実現したいこと
2
2
  zipファイルをIphoneのchromeからダウンロードと解凍を出来るようにしたいです。
3
3
 
4
- 一応PCのchromeとsafaliのブラウザからダウンロードをして解凍するまでまではできました。ただIphoneのchromeからダウンロードすると、ダウンロードはできるんですがファイル名に拡張子が含まれておらずダウンロードした後に.zipを付け足して解凍をしようとしても、ファイルが壊れているのか解凍ができません。
4
+ 一応PCのchromeとsafariのブラウザからダウンロードをして解凍するまでまではできました。ただIphoneのchromeからダウンロードすると、ダウンロードはできるんですがファイル名に拡張子が含まれておらずダウンロードした後に.zipを付け足して解凍をしようとしても、ファイルが壊れているのか解凍ができません。
5
5
 
6
6
  ### ~~前提・実現したいこと~~(ここの部分は解決済み)
7
7
  ~~ダウンロードボタンを押すとzipファイルを作成してダウンロード出来るようにしたいです。~~

9

2022/01/16 23:23

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- PHPでzipファイルのダウンロードがうまくできません
1
+ PHPでzipファイルのダウンロードがうまくできません(Iphoneのchrome)
test CHANGED
@@ -1,163 +1,92 @@
1
- ### 前提・実現したいこと
1
+ ### 追記 2022年1月17日 前提・実現したいこと
2
+ zipファイルをIphoneのchromeからダウンロードと解凍を出来るようにしたいです。
2
3
 
3
- ダウンロードボタンすとzipファイルを作成してダウンロード出来るよういで
4
+ 一応PCのchromeとsafaliのブラウザからダウンロードをして解凍るまでまではできました。ただIphoneのchromeからダウンロードする、ダウンロードはできるんですがファイル名に拡張子が含まれおらずダウンロードした後に.zipを付け足して解凍をしようても、ファイルが壊れてるのか解凍がきません
4
5
 
6
+ ### ~~前提・実現したいこと~~(ここの部分は解決済み)
7
+ ~~ダウンロードボタンを押すとzipファイルを作成してダウンロード出来るようにしたいです。~~
5
8
 
6
-
7
- 下記のコードだとzipファイル作成までは出来たのですが、その後にダウンロードが始まることはなくブラウザ上にzipの中身が文字化けして表示されるだけで何も動作しません。作成できたzipファイルを直接ダウンロードして解凍してみたのですが問題なく解凍できました。なのでダウンロード周りのコードが間違っているのかもしれません。
9
+ ~~下記のコードだとzipファイル作成までは出来たのですが、その後にダウンロードが始まることはなくブラウザ上にzipの中身が文字化けして表示されるだけで何も動作しません。作成できたzipファイルを直接ダウンロードして解凍してみたのですが問題なく解凍できました。なのでダウンロード周りのコードが間違っているのかもしれません。~~
8
-
9
-
10
10
 
11
11
  ### 該当のソースコード
12
-
13
12
  ```php
14
-
15
13
  <?php
16
-
17
14
  $test_file = __DIR__ . '/../../../uploads/txt/test.txt';
18
15
 
19
-
20
-
21
16
  if (isset($_POST['downloadbutton'])) {
22
-
23
17
  $zip = new ZipArchive();
24
-
25
18
  $zipFileName = get_the_ID() . '.zip';
26
-
27
19
  $zipTmpDir = __DIR__ . '/../../../uploads/zip/';
28
-
29
20
  $result = $zip->open($zipTmpDir.$zipFileName, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE);
30
-
31
21
 
32
-
33
22
  if ($result === true) {
34
-
35
23
  set_time_limit(0);
36
-
37
- $zip->addFile($test_file,"test.txt");
24
+ $zip->addFile($test_file, 'test.txt');
38
-
39
25
  $zip->close();
40
26
 
41
-
42
-
43
- // Zip圧縮したファイルをダウンロード(この後が間違えている気がします)
44
-
45
- // mb_output_handler("pass");
46
-
47
- // mb_http_output("pass");
48
-
49
- // header('Content-Type: application/zip; name="' . $zipFileName . '"');
50
-
51
27
  header('Content-type: application/zip');
52
-
53
28
  header('X-Content-Type-Options: nosniff');
54
-
55
- header("Content-Length: ".filesize($zipTmpDir.$zipFileName));
29
+ header('Content-Length: '.filesize($zipTmpDir.$zipFileName));
56
-
57
- header('Content-Disposition: attachment; filename="' . $zipFileName . '"');
30
+ header('Content-Disposition: attachment; filename="'.$zipFileName.'"');
58
-
59
31
  header('Connection: close');
60
-
61
- // while (ob_get_level()) { ob_end_clean(); }
32
+ while (ob_get_level()) { ob_end_clean(); }
62
-
63
- ob_end_clean();
64
-
65
33
  readfile($zipTmpDir.$zipFileName);
66
-
67
- unlink($zipTmpDir.$zipFileName);
68
-
69
- exit;
70
-
71
34
  }
72
-
35
+ unlink($zipTmpDir.$zipFileName);
36
+ exit;
73
37
  }
74
-
75
38
  ?>
76
39
 
77
-
78
-
79
40
  <form id="testdl" method="post">
80
-
81
41
  <button id="button" type="submit" name="downloadbutton"><p>Download</p></button>
82
-
83
42
  </form>
84
-
85
43
  ```
86
44
 
45
+ php.iniに下記を追加することで文字化けがブラウザに表示されなくなり、ダウンロード出来るようになりました。ただこの方法が正しいのか、もしくはただエラーがあるのに無理やりダウンロード出来るようにしているのか分かりません。
46
+ ```php.ini
47
+ output_buffering = on
48
+ ```
87
49
 
50
+ **参考にしたサイト**: [PHP:Warning: Cannot modify header information - headers already sent by ...の解決策](http://go4it.seesaa.net/article/73726670.html)
88
51
 
89
- ### 試したこと
52
+ ### 試したことと結果
90
-
91
53
  - いくつかのサイトを参考にしたのでいらないものを足してしまったか、もしくは引いてしまったのかと思いダウンロード周りのコードを何度も修正したのですが別のエラー(Cannot modify header information - headers already sent)が表示され結局解決できませんでした。
92
-
93
-
94
54
 
95
55
  - while (ob_get_level()) { ob_end_clean(); } を ob_end_clean(); に変更しました。文字化けが表示されるようになりました→  PK 8b�Stest.txtPK? 8b�S��test.txtPK6&
96
56
 
97
-
98
-
99
57
  - 上記のコードを別のphpファイルに移しfunctionにして元のファイルからincludeで呼んだんですが同じ文字化けが表示されました。
100
-
101
-
102
58
 
103
59
  - mb_output_handler("pass"); と mb_http_output("pass"); をコメントアウトしてみましたが同じ文字化けが表示されました。
104
60
 
105
-
106
-
107
61
  - header('Content-Type: application/zip; name="' . $zipFileName . '"'); をコメントアウトしてheader('Content-type: application/zip'); を追加してみましたが同じ文字化けが表示されました。
108
-
109
-
110
62
 
111
63
  - サーバーのファイルパーミッションを確認したんですがダウンロード出来ない原因は見つかりませんでした。
112
64
 
113
-
114
-
115
65
  - 私と同じようにzipの中身が文字化けしてブラウザに表示されてダウンロード出来ない方の解決済みの投稿を見つけたんですが([https://teratail.com/questions/279532](https://teratail.com/questions/279532))その方はCakePHPを使用されているみたいで、その解決策のコードを追加してもエラーが出るだけでした。
116
-
117
66
  追加したコード→ Configure::write('debug', 0);
118
-
119
-
120
67
 
121
68
  - unlink($zipTmpDir.$zipFileName); をコメントアウトし作成されたzipファイルを削除せず、そのzipファイルをhtmlコード <a href="test.zip" download>download test</a> でダウンロードしてみたんですが、それは問題なくダウンロードも解凍もできました。
122
69
 
123
-
124
-
125
70
  - header('X-Content-Type-Options: nosniff'); を追加しました。
126
71
 
72
+ - php.ini に output_buffering = on を追加しました。
127
73
 
128
-
129
- - wp-config.php内に define('WP_DEBUG', false); がなかっ追加、falseとtrue両方試しみました同じ文字化けが表示されした
74
+ - ob_end_clean(); を再び while (ob_get_level()) { ob_end_clean(); } に戻しらダウンロードも解凍もきまた。ただiphoneのchromeからだとダウンロードはできも解凍できせん
130
-
131
75
 
132
76
 
133
77
  ### 補足情報(FW/ツールのバージョンなど)
134
-
135
78
  phpのバージョン: 7.4.25
136
79
 
137
-
138
-
139
80
  phpのzipのバージョン
140
-
141
81
  Zip enabled
142
-
143
82
  Zip version 1.15.6
144
-
145
83
  Libzip headers version 1.3.2
146
-
147
84
  Libzip library version 1.3.2
148
-
149
-
150
85
 
151
86
  使用しているサーバー: Conoha Wing
152
87
 
153
-
154
-
155
88
  使用しているEditer: Visual Studio Code
156
-
157
-
158
89
 
159
90
  Wordpressでサイトを作っています
160
91
 
161
-
162
-
163
92
  よろしくお願いいたします。

8

試したこと追加

2022/01/07 21:35

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -126,6 +126,8 @@
126
126
 
127
127
 
128
128
 
129
+ - wp-config.php内に define('WP_DEBUG', false); がなかったので追加し、falseとtrue両方試してみましたが同じ文字化けが表示されました。
130
+
129
131
 
130
132
 
131
133
  ### 補足情報(FW/ツールのバージョンなど)

7

コードと試したことを追加

2022/01/07 21:35

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -49,6 +49,8 @@
49
49
  // header('Content-Type: application/zip; name="' . $zipFileName . '"');
50
50
 
51
51
  header('Content-type: application/zip');
52
+
53
+ header('X-Content-Type-Options: nosniff');
52
54
 
53
55
  header("Content-Length: ".filesize($zipTmpDir.$zipFileName));
54
56
 
@@ -116,6 +118,16 @@
116
118
 
117
119
 
118
120
 
121
+ - unlink($zipTmpDir.$zipFileName); をコメントアウトし作成されたzipファイルを削除せず、そのzipファイルをhtmlコード <a href="test.zip" download>download test</a> でダウンロードしてみたんですが、それは問題なくダウンロードも解凍もできました。
122
+
123
+
124
+
125
+ - header('X-Content-Type-Options: nosniff'); を追加しました。
126
+
127
+
128
+
129
+
130
+
119
131
  ### 補足情報(FW/ツールのバージョンなど)
120
132
 
121
133
  phpのバージョン: 7.4.25

6

タグ追加

2022/01/07 21:23

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
 
7
- 下記のコードだとzipファイル作成までは出来たのですが、その後にダウンロードが始まることはなくページに移り背景白いまま何も動作しません。作成できたzipファイルを直接ダウンロードして解凍してみたのですが問題なく解凍できました。なのでダウンロード周りのコードが間違っているのかもしれません。
7
+ 下記のコードだとzipファイル作成までは出来たのですが、その後にダウンロードが始まることはなくブラウザ上にzip中身文字化けして表示されるだけで何も動作しません。作成できたzipファイルを直接ダウンロードして解凍してみたのですが問題なく解凍できました。なのでダウンロード周りのコードが間違っているのかもしれません。
8
8
 
9
9
 
10
10
 

5

試したこと追加

2021/12/30 22:23

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -5,12 +5,6 @@
5
5
 
6
6
 
7
7
  下記のコードだとzipファイル作成までは出来たのですが、その後にダウンロードが始まることはなく別のページに移り背景が白いまま何も動作しません。作成できたzipファイルを直接ダウンロードして解凍してみたのですが問題なく解凍できました。なのでダウンロード周りのコードが間違っているのかもしれません。
8
-
9
-
10
-
11
- ### 追記
12
-
13
- 色々なサイトに載っているphpでファイルをダウンロードするコードと下記のコードを見比べてみても、問題になるところが見当たらないのですがコードの原因ではなくサーバーの設定が原因でダウンロード出来ないということも考えられますでしょうか?サーバーのファイルとフォルダのパーミッションが原因かと思い確認をしたんですが特に問題はなさそうです。
14
8
 
15
9
 
16
10
 
@@ -116,6 +110,12 @@
116
110
 
117
111
 
118
112
 
113
+ - 私と同じようにzipの中身が文字化けしてブラウザに表示されてダウンロード出来ない方の解決済みの投稿を見つけたんですが([https://teratail.com/questions/279532](https://teratail.com/questions/279532))その方はCakePHPを使用されているみたいで、その解決策のコードを追加してもエラーが出るだけでした。
114
+
115
+ 追加したコード→ Configure::write('debug', 0);
116
+
117
+
118
+
119
119
  ### 補足情報(FW/ツールのバージョンなど)
120
120
 
121
121
  phpのバージョン: 7.4.25

4

追記とコード修正

2021/12/30 22:18

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -5,6 +5,12 @@
5
5
 
6
6
 
7
7
  下記のコードだとzipファイル作成までは出来たのですが、その後にダウンロードが始まることはなく別のページに移り背景が白いまま何も動作しません。作成できたzipファイルを直接ダウンロードして解凍してみたのですが問題なく解凍できました。なのでダウンロード周りのコードが間違っているのかもしれません。
8
+
9
+
10
+
11
+ ### 追記
12
+
13
+ 色々なサイトに載っているphpでファイルをダウンロードするコードと下記のコードを見比べてみても、問題になるところが見当たらないのですがコードの原因ではなくサーバーの設定が原因でダウンロード出来ないということも考えられますでしょうか?サーバーのファイルとフォルダのパーミッションが原因かと思い確認をしたんですが特に問題はなさそうです。
8
14
 
9
15
 
10
16
 
@@ -42,11 +48,13 @@
42
48
 
43
49
  // Zip圧縮したファイルをダウンロード(この後が間違えている気がします)
44
50
 
45
- mb_output_handler("pass");
51
+ // mb_output_handler("pass");
46
52
 
47
- mb_http_output("pass");
53
+ // mb_http_output("pass");
48
54
 
49
- header('Content-Type: application/zip; name="' . $zipFileName . '"');
55
+ // header('Content-Type: application/zip; name="' . $zipFileName . '"');
56
+
57
+ header('Content-type: application/zip');
50
58
 
51
59
  header("Content-Length: ".filesize($zipTmpDir.$zipFileName));
52
60
 
@@ -104,6 +112,10 @@
104
112
 
105
113
 
106
114
 
115
+ - サーバーのファイルパーミッションを確認したんですがダウンロード出来ない原因は見つかりませんでした。
116
+
117
+
118
+
107
119
  ### 補足情報(FW/ツールのバージョンなど)
108
120
 
109
121
  phpのバージョン: 7.4.25

3

試したこと追加

2021/12/29 05:16

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -96,6 +96,14 @@
96
96
 
97
97
 
98
98
 
99
+ - mb_output_handler("pass"); と mb_http_output("pass"); をコメントアウトしてみましたが同じ文字化けが表示されました。
100
+
101
+
102
+
103
+ - header('Content-Type: application/zip; name="' . $zipFileName . '"'); をコメントアウトしてheader('Content-type: application/zip'); を追加してみましたが同じ文字化けが表示されました。
104
+
105
+
106
+
99
107
  ### 補足情報(FW/ツールのバージョンなど)
100
108
 
101
109
  phpのバージョン: 7.4.25

2

コードを別のphpファイルに移しfanctionにして元のファイルからincludeした

2021/12/28 07:54

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -92,6 +92,10 @@
92
92
 
93
93
 
94
94
 
95
+ - 上記のコードを別のphpファイルに移しfunctionにして元のファイルからincludeで呼んだんですが同じ文字化けが表示されました。
96
+
97
+
98
+
95
99
  ### 補足情報(FW/ツールのバージョンなど)
96
100
 
97
101
  phpのバージョン: 7.4.25

1

コードを変更

2021/12/27 07:46

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -54,7 +54,9 @@
54
54
 
55
55
  header('Connection: close');
56
56
 
57
- while (ob_get_level()) { ob_end_clean(); }
57
+ // while (ob_get_level()) { ob_end_clean(); }
58
+
59
+ ob_end_clean();
58
60
 
59
61
  readfile($zipTmpDir.$zipFileName);
60
62
 
@@ -82,7 +84,11 @@
82
84
 
83
85
  ### 試したこと
84
86
 
85
- -いくつかのサイトを参考にしたのでいらないものを足してしまったか、もしくは引いてしまったのかと思いダウンロード周りのコードを何度も修正したのですが別のエラー(Cannot modify header information - headers already sent)が表示され結局解決できませんでした。
87
+ - いくつかのサイトを参考にしたのでいらないものを足してしまったか、もしくは引いてしまったのかと思いダウンロード周りのコードを何度も修正したのですが別のエラー(Cannot modify header information - headers already sent)が表示され結局解決できませんでした。
88
+
89
+
90
+
91
+ - while (ob_get_level()) { ob_end_clean(); } を ob_end_clean(); に変更しました。文字化けが表示されるようになりました→  PK 8b�Stest.txtPK? 8b�S��test.txtPK6&
86
92
 
87
93
 
88
94