回答編集履歴

3

表記ミスがあったので修正しました

2021/04/28 06:49

投稿

AbeTakashi
AbeTakashi

スコア4853

test CHANGED
@@ -32,7 +32,7 @@
32
32
 
33
33
  ```
34
34
 
35
- $profile_image = 'uploads/user/profile.png';
35
+ $profile_image = 'public/uploads/user/profile.png';
36
36
 
37
37
  Storage::disk('project')->delete($profile_image);
38
38
 

2

表示が崩れていたので修正しました

2021/04/28 06:49

投稿

AbeTakashi
AbeTakashi

スコア4853

test CHANGED
@@ -26,7 +26,7 @@
26
26
 
27
27
 
28
28
 
29
- ```php artisan config:cache``` でconfigをキャッシュに読み込み、
29
+ php artisan config:cache でconfigをキャッシュに読み込み、
30
30
 
31
31
 
32
32
 

1

間違いがあったので修正しました

2021/04/28 06:46

投稿

AbeTakashi
AbeTakashi

スコア4853

test CHANGED
@@ -1,3 +1,57 @@
1
+ まず ```config/filesystems.php```を確認してルートパスを確認します。おそらく```'public'```は```storage_path('app/public')```となっていると思います。ここを起点にしてすべてを相対パスで考える必要があります。ですが、相対パスを使ってrootの上に行こうとすると```laravel Path is outside of the defined root```という例外が出てエラーになります(余計なディレクトリにアクセスさせない安全機構と思われます)ので、この方法ではダメなようです。
2
+
3
+
4
+
5
+ なので、これが一番良い方法かは分かりませんが、filesystem.phpに以下の設定をして、プロジェクト全体のローカルディスクを作ると目的を果たせるようにはなります。
6
+
7
+
8
+
9
+ config.phpに'project'の内容を追加
10
+
11
+ ```
12
+
13
+ 'disks' => [
14
+
15
+ 'project' => [
16
+
17
+ 'driver' => 'local',
18
+
19
+ 'root' => base_path(),
20
+
21
+ ],
22
+
23
+ ],
24
+
25
+ ```
26
+
27
+
28
+
29
+ ```php artisan config:cache``` でconfigをキャッシュに読み込み、
30
+
31
+
32
+
33
+ ```
34
+
35
+ $profile_image = 'uploads/user/profile.png';
36
+
37
+ Storage::disk('project')->delete($profile_image);
38
+
39
+ Storage::disk('project')->copy('resources/user/profile.png', $profile_image);
40
+
41
+ ```
42
+
43
+
44
+
45
+ これでどうでしょう。ただ、すべてのプロジェクトファイルにアクセスできてしまうので、安全性としてはあまりよくないですね。アップロードする画像をpublic以外にするなどして、もう少しスマートな方法を考えた方が良いような気もします。
46
+
47
+
48
+
49
+ ---
50
+
51
+ 最初に書いた以下の内容は間違いでした。
52
+
53
+
54
+
1
55
  相対パスを使うとトラブル場合が多いので、絶対パスを使うべきかと思います。```base_path()```や```storage_path()```、```resource_path()```など色々ありますので、要件に沿って利用してみてください。
2
56
 
3
57