可能性のある重複:
MySQLの画像
MySQLに画像を保存する
登録の一環としてユーザーが画像をアップロードするWebサイトを開発しようとしています。画像ごとに、PHP(それほど難しくない)で作成されたサムが必要です。親指を(非常に小さいため)データベースに保存し、MySQLを使用します。 (親指をドライブ上の物理ファイルとして保存したくありません。)
MySQLは画像データの保存と取得を許可していますか?画像データをサポートしていない場合、無料のデータベースはありますか?リンクを提供できれば幸いです。
ありがとう。
はい、データベースに画像を保存できますが、私の意見ではお勧めできませんし、一般的な慣行でもありません。
一般的な方法は、ファイルシステム上のディレクトリに画像を保存し、データベースへの画像への参照を保存することです。例えばまたは、コンテンツ配信ネットワーク(CDN)または物理的なテリトリーの大きな広がりにある多数のホストに画像を保存し、データベース内のそれらのリソースにアクセスするための参照を保存することもできます。
画像は1MBを超える非常に大きくなる可能性があります。したがって、データベースに画像を保存すると、データベースと、データベースとWebサーバーが異なるホスト上にある場合にそれらのネットワークに不必要な負荷がかかる可能性があります。
私は、40万人以上の従業員を抱える新興企業、中規模企業、大規模テクノロジー企業で働いてきました。私の13年間のプロの経験では、データベースに画像を保存する人を見たことがありません。私はこれが珍しい習慣である声明を支持するために言っています。
Blobとして保存する必要があります。mysqlのLONGBLOBデータ型は機能します。
例:
CREATE TABLE 'test'.'pic' (
'idpic' INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
'caption' VARCHAR(45) NOT NULL,
'img' LONGBLOB NOT NULL,
PRIMARY KEY ('idpic')
)
他の人が言ったように、それは悪い習慣ですが、それを行うことができます。ただし、このコードがうまくスケールするかどうかはわかりません。
MySQLに画像をBLOBとして保存できます。ただし、これにはいくつかの理由で問題があります。
代わりに、テーブルを更新してimage_pathフィールドを追加することを検討してください。例えば:
ALTER TABLE `your_table`
ADD COLUMN `image_path` varchar(1024)
次に、イメージをディスクに保存し、イメージパスでテーブルを更新します。イメージを使用する必要がある場合は、指定されたパスを使用してディスクからイメージを取得します。
このアプローチの有利な副作用は、画像が必ずしもディスクに保存されないことです。画像パスの代わりにURLを簡単に保存し、インターネットに接続された任意の場所から画像を取得できます。
データベースに画像をBLOBとして保存する必要があります。
テーブル内にPHOTOという列を作成し、それをmediumblobとして設定します。
次に、次のようなフォームから取得します。
$data = file_get_contents($_FILES['photo']['tmp_name']);
次に、列を$ dataの値に設定します。
もちろん、これは悪い習慣であり、おそらくユーザーアカウントに対応する名前でファイルをシステムに保存したいと思うでしょう。