質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel

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

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

3222閲覧

Laravelで、ローカル環境で表示されていた画像が本番環境で表示されない

Mike_Trout

総合スコア3

Laravel

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

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2021/01/24 08:57

PHP / Laravelでわからないことがあるので、質問させていただきます。

●バージョン
PHP 7.4.13
Laravel 8.23.1

●実現したいこと
ローカル環境で表示できていた画像を本番環境でも表示させたい。

●詳細

[users / edit.blade.php] <img id="preview" src="{{ $user->profile_img ? $user->profile_img : '/storage/noimage.png' }}" alt="プロフィール画像">

上記は画像のプレビューのimgタグです。
ユーザーのプロフィール画像をアップロードすると上記imgタグにアップロードした画像が非同期通信で入るようになっています。
ユーザーのプロフィール画像がアップロードされていない場合は、
laravel/storage/app/public/ 以下にある noimage.png{ のNO IMAGE画像が表示されるようになっています。
ローカル環境では問題なくNO IMAGE画像が表示されるのですが、AWS・EC2にデプロイした本番環境では表示されません。
なお、本番環境のlaravel/storage/app/public/ 以下にnoimage.png は存在していません。

●補足
アップロードした画像はローカル・本番ともにAWS/S3に保存しており、こちらは両環境で問題なく表示されています。
上記のNO IMAGE画像のみlaravel/storage/app/public/以下に置いています。

●試したこと
本番環境にてphp artisan storage:linkを実行しましたが、解決しませんでした。
ご知見のある方いらっしゃいましたら、解決方法をご教授いただけますと幸いです。
よろしくお願いいたします。

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

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

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

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

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

Suumon

2021/01/24 09:57

確認したいのですが、 ・ローカルのlaravel/storage/app/public/と本番環境のS3に画像は保存できている ・ローカルの画像は表示できている ・S3に保存している画像は表示できない でよろしかったでしょうか? ちなみに、画像を表示するためにパスを取得する処理等、記載しているクラスがあると思いますが、 そちらの中身はどのようになっておりますでしょうか?
AbeTakashi

2021/01/24 10:25

まずはブラウザの開発モード上に出るログやLaravelの上のログをチェックしたらどうでしょう。何か出ていたら必要用に応じてこちらの情報も上げてください。「表示されない」という情報がちょっと漠然としていて、これだと答えるにもエスパー能力が必要になりそうです。この手の不具合はパス設定のミスだったりhttpとhttpsの違いだったりとか、その辺が理由の場合が多いのですが、現状だとちょっと分かりません。
Mike_Trout

2021/01/24 13:06

Suumonさん 前回に引き続き今回もご返信いただきありがとうございます。 ・ローカルのlaravel/storage/app/public/と本番環境のS3に画像は保存できている →はい、保存できています。 ・ローカルの画像は表示できている →はい、表示できています。 ・S3に保存している画像は表示できない →こちらは本番環境、ローカル環境共に、表示できています。 表示できないのは本番環境のlaravel/storage/app/public/に置いてあるはずのNO IMAGE画像のみです。 NO IMAGE画像のパスを取得する処理、記載しているクラス等は特にありません。 (ユーザープロフィール画像としてS3にアップロードした画像の処理はUsersController.phpに記載していますが、こちらは本番環境でも表示できているため、問題ありません。) users/ edit.blade.phpの <img id="preview" src="{{ $user->profile_img ? $user->profile_img : '/storage/noimage.png' }}" alt="プロフィール画像"> の記述のみでローカル環境ではNO IMAGE画像を表示できていました。
Mike_Trout

2021/01/24 13:24

Abeさん ご返信いただきありがとうございます。 アドバイスありがとうございます。 アドバイス通り確認したところ、まずchromeの検証ツールには下記のようなエラーが表示されています。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー GET http://[#IPアドレス]/storage/noimage.png 404 (Not Found) ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 次にstorage/logs/laravel.logを確認しましたが、こちらは特にエラーはありませんでした。
guest

回答1

0

ベストアンサー

本番環境のlaravel/publicディレクトリ以下に/storage/noimage.pngが存在しないとか、シンボリックリンクが張られてないとか、httpとhttpsの違いとか、そんな感じじゃないですかね? Document Rootの設定とかその辺もちゃんと見た方が良いと思います

参考
https://qiita.com/YasuhaF/items/9a897e83afe1819d97af

投稿2021/01/24 16:52

AbeTakashi

総合スコア4537

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

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

Mike_Trout

2021/01/25 09:13

ご返信ありがとうございます。 どうやら、本番環境には/storage/app/public/以下には画像ファイルがないようです。 ローカル環境のディレクトリにはあったのですが、確認したところ、画像ファイルがGitHub上にpushされていませんでした。 なので、本番環境に画像ファイルそのものがありませんでした(汗) お忙しい中ご返信いただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問