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

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

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

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

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

Q&A

解決済

7回答

1509閲覧

[DB]画像アップロードはDBへできるのか?どこへするべき?[cakephp]

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

0グッド

1クリップ

投稿2020/07/01 03:06

編集2020/07/02 09:24

前提・実現したいこと

サイト制作をしていて、画像アップロードをしたいと思っています。
DB接続もしていて、そこにテーブルを作りimages欄は作っています。
問1.しかし、アップロードされた画像たちはどこへ保存されるべきなんですか?
実務において企業やそこら辺のサイトは上のようにしていますか?
データベースに保存するという形で間違いないんでしょうか。
問2.その場合、inputで名前でも入力して、fileから画像をアップロードしますよね。
その後、データベースに名前を保存して、imageも同じように保存すれば名前だけでなくテーブルのカラムになんらかの形で画像として保存されるんでしょうか?またそのやり方を教えていただけますか?
"公式サイトのどこを見ればわかりますか?"画像に関しては私は見つけられず。
記述の仕方もわからず、困っています。

試したこと

リンク内容

リンク内容
を参考に現在アップロード関係を探っています。参考にしてください。

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

cakephp4

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

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

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

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

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

guest

回答7

0

回答

問1.について

DBに画像そのものは保存しないです。

画像ファイル:任意のディレクトリに保存する。
画像ファイルパス:画像ファイルを保存した先のパスを取得する。
DBには画像ファイルパスを保存する。
ということを大体のところがやってると思います。

下記のURLも参考いただければと思います。

問2.について

DBに画像を保存しないので回答はしない、と思いましたが、
「画像 DB 保存 cakephp」で検索すればいろいろHITしたのでそれだけお伝えいたします。

参考

2017/06/21 の質問ですが、DBに画像を保存することのデメリットについてステキな回答があるので参考にしてください。
データベースに画像を保存するのはありでしょうか?

投稿2020/07/01 03:25

bracket_i

総合スコア193

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

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

0

アップロードするのがクライアントなら、クライアントが編集可能な領域(ディレクトリ)を
つくっておいてそこにアップするのが妥当です。(ファイル名の競合など避けられます)

投稿2020/07/01 03:25

yambejp

総合スコア114829

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

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

yambejp

2020/07/01 03:49 編集

日本語ファイル名はインターネット上好ましくないのでエンティティ化するなり 適当に番号を振るなりして別名を使います DBにファイルをデータとして登録することは可能ですが、ほぼほぼ容量の無駄遣いなので 特殊な検索をさせたい場合以外個人的にはメリットは感じません
yambejp

2020/07/01 03:49

検索性だけを考えれば、ファイルは実体としてサーバーにおき、情報だけをDBに 登録するというやり方もあります。これはこれで煩雑ですがやったことはあります。 たとえば、アップロードした状態では非表示にしておいて、承認者がOKしたものだけ 表示にきりかえるなどはDBでやるほうが有利です
guest

0

アップロードされた画像たちはどこへ保存されるべきなんですか?

状況依存です。おおむね「ファイルとしてサーバ上に置いておく」「オブジェクトストレージを使う」というのが主流の選択肢です。

「データベースに入れる」という手もなくはないのですが、ちょっと扱いづらいです。

その後、データベースに名前を保存して、imageも同じように保存すれば名前だけでなくテーブルのカラムになんらかの形で画像として保存されるんでしょうか?

「データベースに画像を入れる処理」はCakePHP標準にはありませんので、やるとすれば自分で書く(もしくはそれを行えるライブラリを使う)必要があります。

投稿2020/07/01 03:22

maisumakun

総合スコア145183

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

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

guest

0

まず、DB に画像ファイルのバイナリデータをまるごと入れるのは(blob などのデータ型があるにせよ)しない方がよいでしょう。
入れておいたバイナリを取り出して、<img> タグに入れて表示に使うのに一手間かかってしまうからです。
それよりはどこかにファイルを置いておいて、DB には置き場所の情報さえあれば、<img> タグの src に適切なファイルパスを指定することで簡単に表示できます。
※ただしその場合、referer などでちょく

ちょっと特殊な方法だと、クラウドストレージ(AWS の S3 とか)に置いて、直接リンクさせる手もあります。この場合ファイル名が競合しようが、適切なディレクトリ階層さえ用意できれば問題ありませんし。

投稿2020/07/01 03:55

tacsheaven

総合スコア13703

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

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

0

ベストアンサー

誰一人として、質問の一つである記述法の解とURLチェックすらしていなかったので、この件に関しては自分で調べることにします。

投稿2020/07/01 05:07

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

データベースに画像のようなバイナリファイルを保存することは可能です
僕も以前、PHP で実装していました

ただし、

  • データベースに保存する場合
  • Amazon S3 などのオブジェクトストレージに保存する場合

それぞれにメリット・デメリットがあります

O'Reilly Japan - SQLアンチパターン という書籍の
11章 ファントムファイル で非常に詳細に解説されていますので、
設計を決める前に一度確認しておくことをおすすめします

データベースに格納する場合

画像に関する情報画像自体 を別のテーブルに格納して、
外部キーで関連付けておくことをお奨めします

このように設計しておかないと、
たとえば画像の一覧を取得したいときに
SELECT 文が重くなりサービスがダウンする可能性があります

投稿2020/07/01 04:59

y_shinoda

総合スコア3272

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

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

0

問1.しかし、アップロードされた画像たちはどこへ保存されるべきなんですか?

方針的なものもあると思いますが、環境にもよると思います。

例えば、レンタルサーバーを使っていて、DB は 100MB ぐらいしかないが、サイトのディスク容量は 数GB 与えられているとかですと、DB にはファイル名とか説明のみ保存して画像本体はサイトのディスクに保存せざるを得ないと思います。

DB サーバーの容量が大きくて将来的に容量不足になる可能性を気にしなくて良いなら、画像本体を含めすべて DB に保存した方が管理が楽そうです、が、組織のルールとか方針的なものがあれば話は違うかも。

問2.その場合、inputで名前でも入力して、fileから画像をアップロードしますよね。

ブラウザから画像をアップロードするなら html 要素の input type="file" 要素を使うことが多いと思います。JavaScript / jQuery を使ってアップロードすることも可能です。

その後、データベースに名前を保存して、imageも同じように保存すれば名前だけでなくテーブルのカラムになんらかの形で画像として保存されるんでしょうか?

画像本体を DB に保存するならバイナリーデータを保存できるフィールドを作って、それに保存することになるはずです。

DB サーバーが何かによりますが、例えば SQL Server なら varbinary(max) に画像本体のバイナリーデータを保存します。その他、ファイル名、MIME タイプ、説明などのフィールドも設けて画像に関するすべての情報を一括保存しておくのもよさそうです。

以下は SQL Server の例で、画像をアップロードしたらサーバー側でオリジナル画像を加工してサムネイルと表示用のサイズの小さい画像を作って一緒に保存しています。

イメージ説明

投稿2020/07/01 03:44

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2020/07/01 04:25

>画像をアップロードしたらサーバー側でオリジナル画像を加工してサムネイルと表示用のサイズの小さい画像を作って一緒に保存 これをcakephp4で実現できますか? 公式ドキュメントを見てもいまいちわからなかったんですが、phpでも書き方がわかれば教えていただけますか。 なんて検索すれば出ますか?見たこともないんですが。
退会済みユーザー

退会済みユーザー

2020/07/01 04:45 編集

> これをcakephp4で実現できますか? cakephp には触ったこともないので絶対できるとは言えませんが、「cakephp 画像 リサイズ」などでググると参考になりそうな記事が多々ヒットするので、それをちょっと読んだ限りではできると思いますけど? 逆にお聞きしたいですが、cakephp では画像のリサイズができないということがあるのですか? ググって調べるなどしてみたのでしょうか? ちなみに、回答の SQL Server のデータは ASP.NET Web Forms アプリで .NET Framework のライブラリを使ってリサイズしたものです。
tacsheaven

2020/07/01 05:07

画像をリサイズしたければ PHP なら GD ライブラリを使うとか、imagemagick あたりを突っ込んで加工してやれば済む話です。 CakePHP 単体の機能にはありませんが、実現は難しい話ではありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問