🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Storage+

Storage+は、IT業界団体CompTIA認定の資格で、ストレージに関する知識を証明します。ストレージの設計・構築~運用・管理までの知識を評価し、接続時のトラブルシューティングや基礎的なストレージ・システム管理のスキルを取得している証明になります。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

3回答

2022閲覧

Laravel の ファイルシステムのデフォルトがstorageになっている理由が知りたい

sam1111

総合スコア4

Storage+

Storage+は、IT業界団体CompTIA認定の資格で、ストレージに関する知識を証明します。ストレージの設計・構築~運用・管理までの知識を評価し、接続時のトラブルシューティングや基礎的なストレージ・システム管理のスキルを取得している証明になります。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/08/30 07:23

前提・実現したいこと

laravelで開発を行っているものです。
Laravelでは、ファイルシステムのローカルドライバーの保存先として、デフォルトでstorageが指定されているのですが、リファレンスを読んでもなぜ、storage以下になっているのかがいまいちわからなかったので、ご存じの方は教えて頂けますと幸いです。

ファイル

該当のソースコード

php

1'disks' => [ 2 3 'local' => [ 4 'driver' => 'local', 5 'root' => storage_path('app'), 6 ], 7 8 'public' => [ 9 'driver' => 'local', 10 'root' => storage_path('app/public'), 11 'url' => env('APP_URL').'/storage', 12 'visibility' => 'public', 13 ], 14 ],

試したこと

以下に書いている内容を読んでわからないという感じです。

https://readouble.com/laravel/5.8/ja/filesystem.html

補足情報(FW/ツールのバージョンなど)

Laravel 5.8

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

保存先をpublic以下にしてしまって~

Laravelの中の人ではないので公式見解でなく個人の意見ですが、下記の理由により、public等ではないほうが良いと考えます。

1.
public下には"index.php"等、アプリケーションから上書きされたくないファイルがたくさんあります。

localのデフォルトパスがpublic下だった場合、index.phpの権限管理が適切ではない状態で、Laravelでうっかり下記のコードを書いてしまうと、システム自体が動かなくなります(index.phpの中身が壊れてしまうので)。

php

1Storage::disk('local')->put('index.php', 'hoge');

そのため、ストレージのデフォルトDIRは「アプリケーションがうっかり上書きしてもシステム的に困るファイルが無い場所=ストレージ専用DIR」であることが望ましいです。

2.
これも個人的な感覚ですが、単にファイルを保存する目的でストレージを使おうとしただけなのに、「気を付けないと、保存したファイルは全世界に公開される仕様」は嫌だなあ……と思いました。
それよりは、デフォルトは当たり障りのないディレクトリに保存するようにしておき、「公開したい時は作業が必要」のほうが安心かなと。

なお、上記のデメリットを考慮した上で「どうしてもpublic以下に直接保存をしたい」ということであれば、rootの設定を下記のように書き換える&publicディレクトリの書き込み権限を変更すれば対応可能かと思います。

php

1// 'root' => storage_path('app/public'), 2 'root' => public_path(),

保存先は簡単に変えられるため、あくまで「デフォルト」については極力安全なほうに寄せておく……というのがフレームワークにおける一般的な仕様かなと。

投稿2019/08/30 11:27

nak

総合スコア696

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

サーバ上で動的に増える画像などのファイルは、バージョン管理の対象にならないファイルと言えます。つまり、ログファイルなどと一緒です。
バージョン管理しないファイルの置き場としては、storageフォルダがある為、そこにまとめていると言えます。

少し別の角度から見ますと、公開フォルダは、開発サーバでも本番サーバでも同じコンテンツを保有しておきたい訳です。
環境ごとで異なるファイルをあちこちで保有していると、サーバ環境に依っては面倒な事になります。

ただ、質問者様の意見も理解できます。
実際私も共有サーバなどに設置する場合などでは、公開側に直接置いたりもしています。

投稿2019/12/21 17:10

nshiro

総合スコア185

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

「作った人がそう決めたから」と言ってしまうと身もふたもないかもしれませんが・・

そもそも「storage」自体に「保管・貯蔵・格納」といった意味があるので、
Laravelに限らずファイルシステムの保管先に利用しているケースも結構あります。

JavaScriptから使えるブラウザにデータを保存する仕組みはWebStorageですしね。

投稿2019/08/30 07:35

m.ts10806

総合スコア80875

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sam1111

2019/08/30 08:27 編集

回答有り難うごさいます。 個人的な感覚では、保存先をpublic以下にしてしまって、保存時に格納先のディレクトリを変えて、各ディレクトリごとにアクセス制限をかけてしまえば、シンボリックリンクをはることによる弊害もないので、こちらのほうがいいかなと思いました。 ですので、保存先をstorage以下にする強烈なメリットがあればというかんじです、、、 これに関してはいかがでしょうか?
m.ts10806

2019/08/30 08:25

public配下だと提示されたように制限かけたりなんだり結構面倒なこともありますし、ひとまず「フレームワークのお作法」として飲み込んだほうがいいように思いますけど・・・ もしいけそうでしたらやってみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問