回答編集履歴
1
Windows版PHPの場合について編集
test
CHANGED
@@ -1,122 +1,38 @@
|
|
1
|
-
|
1
|
+
コメントでWindows版PHP環境だと教えていただいたので、解決済みですが回答を編集しておきます。
|
2
2
|
|
3
|
-
|
3
|
+
Windows版PHP環境の場合、ファイル名取得の際、日本語ファイル名はCP932(SJIS-WIN)なので日本語ファイル名の文字コード変換すれば動くと思います。現在試せないので動かなかったらすみません。
|
4
4
|
|
5
5
|
|
6
6
|
|
7
|
-
|
7
|
+
1. 日本語ファイル名文字コード:CP932(SJIS-WIN)
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
```bash
|
12
|
-
|
13
|
-
|
9
|
+
1. PHP文字コード:UTF-8
|
14
|
-
|
15
|
-
#バージョン確認
|
16
|
-
|
17
|
-
php artisan --version
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
#5.1最新版にアップデート
|
22
|
-
|
23
|
-
composer self-update
|
24
|
-
|
25
|
-
composer update
|
26
|
-
|
27
|
-
```
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
私の手元の環境で **Laravel-5.1(v5.1.46)** を新規インストールしてから実際に試してみましたが、特になんの設定もせずに日本語ファイルをダウンロードできました。
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
```php
|
36
|
-
|
37
|
-
$filePath = storage_path().'/app/public/history/ほげほげ.xls';
|
38
|
-
|
39
|
-
return response()->download($filePath);
|
40
|
-
|
41
|
-
```
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
**Laravel,Symfony関連ソース**
|
46
|
-
|
47
|
-
1. Illuminate\Routing\ResponseFactory::download()
|
48
|
-
|
49
|
-
2. Symfony\Component\HttpFoundation\BinaryFileResponse::setContentDisposition()
|
50
10
|
|
51
11
|
|
52
12
|
|
53
13
|
|
54
14
|
|
55
|
-
####
|
15
|
+
#### Laravel,Symfony関連ソース
|
56
16
|
|
57
17
|
|
58
18
|
|
59
|
-
|
19
|
+
1. Illuminate\Routing\ResponseFactory::download()
|
60
20
|
|
21
|
+
1. Symfony\Component\HttpFoundation\BinaryFileResponse::setFile()
|
61
22
|
|
23
|
+
1. Symfony\Component\HttpFoundation\File\File(\SplFileInfo拡張 ←ここでファイルパス設定)
|
62
24
|
|
63
|
-
1. ResponseMacroServiceProvider.phpエラー(27行目)
|
64
|
-
|
65
|
-
1. DBコネクションエラー
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
```
|
70
|
-
|
71
|
-
# ResponseMacroServiceProvider.phpエラー(27行目)
|
72
|
-
|
73
|
-
=================================================
|
74
|
-
|
75
|
-
[Fri Jan 12 21:13:21.593528 2018] [:error] [pid 41704:tid 1948] [client ::1:55594]
|
76
|
-
|
77
|
-
PHP Fatal error:
|
78
|
-
|
79
|
-
Class App\Providers\ResponseMacroServiceProvider contains 1 abstract method ... (Illuminate\Support\ServiceProvider::register)
|
80
|
-
|
81
|
-
in app\Providers\ResponseMacroServiceProvider.php on line 27
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
# DBコネクションエラー
|
86
|
-
|
87
|
-
=================================================
|
88
|
-
|
89
|
-
[Fri Jan 12 21:13:21.610530 2018] [:error] [pid 41704:tid 1948] [client ::1:55594]
|
90
|
-
|
91
|
-
PHP Fatal error: Uncaught Error:
|
92
|
-
|
93
|
-
Call to a member function connection() on null in Illuminate\Database\Eloquent\Model.php:3224
|
94
|
-
|
95
|
-
Stack trace:
|
96
|
-
|
97
|
-
#0 Illuminate\Database\Eloquent\Model.php(3190): Illuminate\Database\Eloquent\Model::resolveConnection(NULL)
|
98
|
-
|
99
|
-
#1 Illuminate\Database\Eloquent\Model.php(1870): Illuminate\Database\Eloquent\Model->getConnection()
|
100
|
-
|
101
|
-
#2 Illuminate\Database\Eloquent\Model.php(1813): Illuminate\Database\Eloquent\Model->newBaseQueryBuilder()
|
102
|
-
|
103
|
-
#3 Illuminate\Database\Eloquent\Model.php(1432): Illuminate\Database\Eloquent\Model->newQueryWithoutScopes()
|
104
|
-
|
105
|
-
|
25
|
+
1. Symfony\Component\HttpFoundation\BinaryFileResponse::setContentDisposition()
|
106
|
-
|
107
|
-
#5 Illuminate\Foundation\Bootstrap\HandleExceptions.php(79): App\Exceptions\Handler in Illuminate\Database\Eloquent\Model.php on line 3224, referer:
|
108
|
-
|
109
|
-
```
|
110
26
|
|
111
27
|
|
112
28
|
|
113
29
|
|
114
30
|
|
115
|
-
#### ResponseMacroServiceProvider.php
|
31
|
+
#### ResponseMacroServiceProvider.php
|
116
32
|
|
117
33
|
|
118
34
|
|
119
|
-
他の回答者の方の回答にあった`ResponseMacroServiceProvider.php`
|
35
|
+
他の回答者の方の回答にあった`ResponseMacroServiceProvider.php`を使う場合ちょっと編集が必要になります。変更したくない場合は最初に`\SplFileInfo`インスタンスを作成して第1引数に渡します。(この際は第2引数を絶対に渡さなければいけません)
|
120
36
|
|
121
37
|
[https://qiita.com/zeriyoshi/items/8b031b9c4a5a068fe0e4](https://qiita.com/zeriyoshi/items/8b031b9c4a5a068fe0e4)
|
122
38
|
|
@@ -182,13 +98,27 @@
|
|
182
98
|
|
183
99
|
{
|
184
100
|
|
101
|
+
//PHP側はUTF-8だと想定(※違う場合は変更)
|
102
|
+
|
103
|
+
if (false !== strpos(PHP_OS, 'WIN') && is_string($file)) {
|
104
|
+
|
105
|
+
if (empty($name)) {
|
106
|
+
|
107
|
+
$name = basename($file);
|
108
|
+
|
109
|
+
}
|
110
|
+
|
111
|
+
$file = new \SplFileInfo(mb_convert_encoding($file, 'SJIS-win', 'UTF-8'));
|
112
|
+
|
113
|
+
}
|
114
|
+
|
115
|
+
|
116
|
+
|
185
117
|
$response = new BinaryFileResponse($file, 200, $headers, true);
|
186
118
|
|
187
119
|
|
188
120
|
|
189
|
-
if (
|
121
|
+
if (empty($name)) {
|
190
|
-
|
191
|
-
{
|
192
122
|
|
193
123
|
$name = basename($file);
|
194
124
|
|