teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2020/02/04 08:32

投稿

mikkame
mikkame

スコア5036

answer CHANGED
@@ -11,20 +11,24 @@
11
11
 
12
12
  ---
13
13
 
14
+ > Symfony\Component\Debug\Exception\FatalThrowableError : Call to a member function getRealPath() on string
15
+
16
+ 書いてある通りなんですが、 string型に`getRealPath`メソッドはありません。
17
+
18
+ > $file = Storage::disk('ftp')->get('sample.csv');
19
+
20
+ この時点で、リモートからファイルの内容をテキストとして取得します。
21
+ `$file`は`ファイルオブジェクト的ななにか`ではなく`string`です。
22
+
23
+
24
+ ---
25
+
26
+
14
27
  ```
15
28
  $file = Storage::disk('ftp')->get('sample.csv');
16
29
  ```
17
30
  ここで一旦ファイルをメモリ上に載せてしまっているのがまずい気がします。
18
31
 
19
- また
20
-
21
- ```
22
- $csv = new \SplFileObject($file->getRealPath());
23
- ```
24
-
25
- ここのgetRealPathがローカルなのかリモートなのかよくわかりませんね・・・
26
- ちょっと安全に振り、一旦ローカルに保存してから処理を行う方法を考えましょう
27
-
28
32
  laravelのstorageはflysystemでできているはずなのでreadStreamがある気がするので
29
33
 
30
34
 

1

追記

2020/02/04 08:32

投稿

mikkame
mikkame

スコア5036

answer CHANGED
@@ -7,4 +7,34 @@
7
7
  ini_set('memory_limit', '512M');
8
8
  ```
9
9
 
10
- とかでメモリの上限を上げてください。
10
+ とかでメモリの上限を上げてください。
11
+
12
+ ---
13
+
14
+ ```
15
+ $file = Storage::disk('ftp')->get('sample.csv');
16
+ ```
17
+ ここで一旦ファイルをメモリ上に載せてしまっているのがまずい気がします。
18
+
19
+ また
20
+
21
+ ```
22
+ $csv = new \SplFileObject($file->getRealPath());
23
+ ```
24
+
25
+ ここのgetRealPathがローカルなのかリモートなのかよくわかりませんね・・・
26
+ ちょっと安全に振り、一旦ローカルに保存してから処理を行う方法を考えましょう
27
+
28
+ laravelのstorageはflysystemでできているはずなのでreadStreamがある気がするので
29
+
30
+
31
+ ```
32
+
33
+ Storage::disk('local')->writeStream(
34
+ 'temp',
35
+ Storage::disk('ftp')->readStream('sample.csv')
36
+ );
37
+
38
+ ```
39
+
40
+ みたいな感じで一旦ローカルにコピーしてから処理してみてはどうでしょうか