まず config/filesystems.php
を確認してルートパスを確認します。おそらく'public'
はstorage_path('app/public')
となっていると思います。ここを起点にしてすべてを相対パスで考える必要があります。ですが、相対パスを使ってrootの上に行こうとするとlaravel Path is outside of the defined root
という例外が出てエラーになります(余計なディレクトリにアクセスさせない安全機構と思われます)ので、この方法ではダメなようです。
なので、これが一番良い方法かは分かりませんが、filesystem.phpに以下の設定をして、プロジェクト全体のローカルディスクを作ると目的を果たせるようにはなります。
config.phpに'project'の内容を追加
'disks' => [
'project' => [
'driver' => 'local',
'root' => base_path(),
],
],
php artisan config:cache でconfigをキャッシュに読み込み、
$profile_image = 'public/uploads/user/profile.png';
Storage::disk('project')->delete($profile_image);
Storage::disk('project')->copy('resources/user/profile.png', $profile_image);
これでどうでしょう。ただ、すべてのプロジェクトファイルにアクセスできてしまうので、安全性としてはあまりよくないですね。アップロードする画像をpublic以外にするなどして、もう少しスマートな方法を考えた方が良いような気もします。
最初に書いた以下の内容は間違いでした。
相対パスを使うとトラブル場合が多いので、絶対パスを使うべきかと思います。base_path()
やstorage_path()
、resource_path()
など色々ありますので、要件に沿って利用してみてください。
参考
https://conocode.com/howto/laravel-config-directory/
プロジェクト外のディレクトリなら直接ルートディレクトリからの絶対パスで書いた方が良いでしょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/04/28 04:38
2021/04/28 04:57
退会済みユーザー
2021/04/28 06:04 編集
2021/04/28 06:07
退会済みユーザー
2021/04/28 06:12