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

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

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

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

Q&A

0回答

636閲覧

DBにアップロードした画像が表示されません。

mimitaro

総合スコア0

PHP

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

0グッド

0クリップ

投稿2021/11/18 13:07

編集2021/11/20 12:21

商品管理システムの作成をしており、DBにアップロードした画像を一覧に表示したいのですが、表示できません。
シンボリックリンクは実行しており、Public\storageに画像の保存もできております。
もちろんDBにもアップロードした画像のパスはあります。
storageの権限もフルアクセスにしてます。

Controller

1 2/** 3 * 商品登録画面を表示する 4 * 5 * @return view 6 */ 7 public function showCreate() 8 { 9 // INNAR JOIN 10 $products = \DB::table('products') 11 ->join('companies','products.company_id','=','companies.id') 12 ->get(); 13 14 return view('create.create', ['products' => $products]); 15 } 16 17/** 18 * 商品を登録する 19 * 20 * @return view 21 */ 22 public function exeStore(ProductRequest $request) 23 { 24 // 商品のデータを受け取る 25 $inputs = $request->all(); 26 27 $image = $request->file('image'); 28 29 // 画像がアップロードされていれば、storageに保存 30 if($request->hasFile('image')){ 31 $path = \Storage::put('/public', $image); 32 $path = explode('/', $path); 33 }else{ 34 $path = null; 35 } 36 37 \DB::beginTransaction(); 38 try { 39 // 商品を登録 40 Product::create($inputs); 41 \DB::commit(); 42 } catch(\Throwable $e) { 43 \DB::rollback(); 44 abort(500); 45 } 46 47 \Session::flash('err_msg', '商品を登録しました。'); 48 return redirect(route('products')); 49 } 50 51

Model

1 2<?php 3 4namespace App\Models; 5 6use Illuminate\Database\Eloquent\Model; 7 8class Product extends Model 9{ 10 //テーブル名 11 protected $table = 'products'; 12 13 // 可変項目 14 protected $fillable = 15 [ 16 'company_id', 17 'product_name', 18 'price', 19 'stock', 20 'comment', 21 'image', 22 ]; 23 24 // Companiesテーブルと関連付ける 25 public function company(){ 26 return $this->belongsTo(Company::class); 27 } 28} 29

CreateBlade

1 2<label for="image">商品画像登録</label> 3 <input type="file" class="form-control-file" name='image' id="image"> 4

ListBlade

1 2<img src="{{ '/storage/' . $product->image }}" class='w-100 mb-3'/> 3

エラー内容

[autoindex:error] [pid 26956:tid 1288] [client ::1:64175] AH01276: Cannot serve directory


参照動画

##環境

Windows
PHP 7.4.16
MAMP

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

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

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

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

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

hentaiman

2021/11/18 13:57

質問の内容を信じるとsrc間違えてるだけでしょう?って感じですが そうではないならもうちょいログとか実際のディレクトリの状態とかファイルの一覧とか載せた方がいいんでないですか
AbeTakashi

2021/11/18 15:59

サーバのエラーログを確認してみてください。404エラーが出ているのであれば、そこに原因がしっかり書かれている場合が多いです。hentaimanさんも書かれていますが、おそらくパスがずれてるとかそういう理由かと思います。
mimitaro

2021/11/18 16:37

実際のディレクトリはシンボリックリンクを実行してからいじってないので、public\storageに画像が保存されています。 エラーログはlogsを確認しましたが出ていません。 一覧ページに反映されていないだけでエラーも出ていないので。。
AbeTakashi

2021/11/18 16:55

うーん、ちょっと分からないですね。「画像が表示されない」というのが、曖昧な表現なので外部の人が見てもなんとも言えないです。Not Found(404)で画像が表示されないのであれば、すくなくともApacheもしくはLaravelのログに何かしらエラーが出てると思うのですが…。それが出てないのであればそもそもBladeテンプレートの書き方が間違っているとか? あと、$productとかいきなり出てきても、これも回答者から見るとちゃんとデータ入ってるのかな? とか思ってしまいます。 回答に必要な情報が全体的にちょっと足りない感じがあるので、コントローラーやテンプレートの省略してるところを付け足す、実際のディレクトリの情報を記載する(キャプチャ)、ブラウザのログ情報を記載する、など情報を付け足した方が良いと思います。
mimitaro

2021/11/19 10:40

ログを確認したのですが、どのエラーがこれに対するエラーなのかわかりませんでした。。 DBに保存されている画像パスで開くと404にはなります。 Controllerは登録部分をすべてコピペします。 おそらくviewだとは思いますが、どこが原因かすらも見当がつかないので必要箇所があれば教えていただければ追記します。。 Laravel歴1か月もない初心者なので、質問すら下手ですみません。。
AbeTakashi

2021/11/20 07:04 編集

とりあえず↑に足りない情報は書きましたので、書けるところまで書いて頂ければと思います。 ただ、404ならログを見るのが一番早いはずです。サーバ側のエラーログの場所を見つける、ログが出てないならログを出す設定を入れるなどの方が解決の近道かもしれません。WindowsのMAMP環境は私もよく分かりませんので、MAMP環境に関する説明サイトなどを参考にしてログを出す方法を洗い出すといいと思います。
mimitaro

2021/11/20 11:45 編集

とりあえずModel部分追加しました。 Controllerも追加しました。 list.bladeではforeach文を使っています。 ログを確認しましたが、何ヶ所か同時進行して作成してしまっていてどのログがこれに対するエラーログか判断できません。
mimitaro

2021/11/20 12:22

Apacheのエラーログで対象のエラーと思われるログが見つかったので追記しました。 エラー内容を調べましたがよくわからず、どうしたらいいのかわかりませんでした。
hentaiman

2021/11/20 12:28

> DBに保存されている画像パスで開くと404にはなります。 404なのでsrcで指定しているパスが実在しないだけという事は分かりますよね? 質問者自身は正しいファイルパスを把握しているんですか?つまりブラウザに直接URL打って画像表示する事は出来るんですか?
mimitaro

2021/11/20 12:48

直接入力で404になります。 新たにファイルの生成をしていないので、直接storageに入っているのでファイルパスは間違っていないはずです。
hentaiman

2021/11/20 12:58

その言葉を信じるなら、シンボリックリンク張れてるか確認したらどうですか? ってとこです しかし絶対に間違いなくLaravelのマニュアル通りに画像アップシンボリックリンクの手順を進めているというのならシステム的な間違いは無いと思うので、やはりパスが間違っていないという予想が外れており、実際にはパスが間違っているから表示されないのです って事になります 以上2パターンを疑いつつ確認してみては?
mimitaro

2021/11/20 13:18

ありがとうございます。 シンボリックリンクは実行してあるのですが、実際に張れているかの確認が必要ということですか? パスの設定も再度確認してみます。
AbeTakashi

2021/11/20 17:33

hentaimanさんのコメントとほぼかぶりますが、シンボリックリンクが正しく張れていて画像の直URLを直接指定すれば、LaravelやPHPを経由せずとも、画像が正しく表示できるはずです。もし画像の直URLを直接叩いても画像が表示できないのであれば、それはおそらくシンボリックリンクが正しく張れていないか、パスを間違えているかどちらかの可能性が高いです。なので、そこを確認するのが先決かと思います。現状の情報を見る限りでは、おそらくLaravelに関係ないところで引っかかっていそうです。
mimitaro

2021/11/21 12:59

かしこまりました。 再度パスやシンボリックリンクの確認をしてみます。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問