file_put_contents failed to open stream Permission deniedを解決する方法【Laravel】
いつもご利用ありがとうございます。
この記事には広告が掲載されており、その広告費によって運営しています。
Laravel でデプロイした時や Docker で環境構築するときに、file_put_contents failed to open stream Permission denied というエラーが出る場合があるので、解決方法をまとめました。
エラー文
file_put_contents(/var/www/html/laravel-docker/src/storage/framework/views/b560c9abc12f714c866236b477e2d6a6.php): Failed to open stream: Permission denied
解決方法
storage ディレクトリに対して、権限を与えることで解決
chmod -R 777 storage
解決方法の解説
システムが、storage
配下のファイルに対して、読み書きする権限がないためこのエラーが発生します。
なので、storage ディレクトリに対して、権限を与えることで解決します。
chmod -R 777 storage
以上です。
もっと詳しく
storage とは?
Laravel プロジェクトをインストールした際に、以下のようなディレクトリ構成が完成したと思います。
├── app
│ ├── Console
│ ├── Exceptions
│ ├── Http
│ │ ├── Controllers
│ │ ├── Middleware
│ ├── Models
│ ├── Providers
├── bootstrap
│ ├── cache
├── config
├── database
│ ├── factories
│ ├── migrations
│ ├── seeders
├── public
│ ├── index.php
├── resources
├── routes
├── storage ←これ
│ ├── app
│ ├── framework
│ │ ├── cache
│ │ ├── sessions
│ │ ├── testing
│ │ └── views
│ ├── logs
├── tests
├── vendor
├── .env
├── .env.example
略
この中にstorage
というディレクトリがあります。
このディレクトリには、例えば
- ログを出力
- 様々なデータをキャッシュデータが保存される
- キャッシュデータを読み込む
というような役割があり、その結果画面が表示されています。
なので、権限がないと本 件のエラーになります。
ディレクトリ位置を間違えないように気を付ける
初歩的なミスとしてありがちな内容です。
さきほど説明したとおりstorage
に権限を与えなければならないので、ファイルの指定の際には、相対パスに気を付ける必要があります。
chmod -R 777 相対パス
必要があれば、
cd laravel-project
にディレクトリ移動して、chmod
のコマンドを打ちましょう。
以上、誰かの参考になれば幸いです。