画像アップロード時にファイル名をデータベースに保存する (PHP & MySQL)
画像アップロード時にファイル名をデータベースに保存する (PHP & MySQL)
必要なもの:
- PHP 5.6以上
- MySQLデータベース
- 画像ファイル
手順:
データベーステーブルの作成:
以下のSQLクエリを使用して、データベースに images
というテーブルを作成します。
CREATE TABLE images (
id INT AUTO_INCREMENT PRIMARY KEY,
filename VARCHAR(255) NOT NULL,
title VARCHAR(255) NOT NULL,
description TEXT,
uploaded_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
HTMLフォームの作成:
以下のHTMLコードを使用して、画像アップロードフォームを作成します。
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="image">
<input type="text" name="title">
<input type="text" name="description">
<input type="submit" value="アップロード">
</form>
PHPスクリプトの作成:
以下のPHPスクリプトを使用して、画像をアップロードし、ファイル名とその他の情報をデータベースに保存します。
<?php
// ファイルアップロード処理
if (isset($_FILES['image'])) {
$errors = array();
// ファイル名を取得
$filename = $_FILES['image']['name'];
// ファイルサイズチェック
if ($_FILES['image']['size'] > 2097152) {
$errors[] = 'ファイルサイズが大きすぎます。';
}
// MIMEタイプチェック
if (!getimagesize($_FILES['image']['tmp_name'])) {
$errors[] = 'ファイル形式が不正です。';
}
// エラーがない場合はファイルを保存
if (empty($errors)) {
// ファイル名をユニークにする
$filename = uniqid() . '_' . $filename;
// ファイルを保存
move_uploaded_file($_FILES['image']['tmp_name'], 'uploads/' . $filename);
// データベースに保存
$db = new PDO('mysql:host=localhost;dbname=database', 'username', 'password');
$stmt = $db->prepare('INSERT INTO images (filename, title, description) VALUES (?, ?, ?)');
$stmt->execute([$filename, $_POST['title'], $_POST['description']]);
echo 'アップロードが完了しました。';
} else {
// エラーメッセージを表示
foreach ($errors as $error) {
echo $error . '<br>';
}
}
}
?>
動作確認:
- 作成したHTMLファイルをブラウザで開きます。
- 画像ファイルを選択し、タイトルと説明を入力します。
- "アップロード"ボタンをクリックします。
- アップロードが成功すると、メッセージが表示されます。
補足:
- このコードは基本的な例です。必要に応じてセキュリティ対策やエラー処理などを追加してください。
- 画像の保存場所は適宜変更してください。
- データベース接続情報は環境に合わせて変更してください。
- 画像のサムネイルを作成する
- 画像をカテゴリ別に分類する
- 画像にタグを付ける
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="image">
<input type="text" name="title">
<input type="text" name="description">
<input type="submit" value="アップロード">
</form>
PHP:
<?php
// ファイルアップロード処理
if (isset($_FILES['image'])) {
$errors = array();
// ファイル名を取得
$filename = $_FILES['image']['name'];
// ファイルサイズチェック
if ($_FILES['image']['size'] > 2097152) {
$errors[] = 'ファイルサイズが大きすぎます。';
}
// MIMEタイプチェック
if (!getimagesize($_FILES['image']['tmp_name'])) {
$errors[] = 'ファイル形式が不正です。';
}
// エラーがない場合はファイルを保存
if (empty($errors)) {
// ファイル名をユニークにする
$filename = uniqid() . '_' . $filename;
// ファイルを保存
move_uploaded_file($_FILES['image']['tmp_name'], 'uploads/' . $filename);
// データベースに接続
$db = new PDO('mysql:host=localhost;dbname=database', 'username', 'password');
// データベースに保存
$stmt = $db->prepare('INSERT INTO images (filename, title, description) VALUES (?, ?, ?)');
$stmt->execute([$filename, $_POST['title'], $_POST['description']]);
echo 'アップロードが完了しました。';
} else {
// エラーメッセージを表示
foreach ($errors as $error) {
echo $error . '<br>';
}
}
}
?>
SQL:
CREATE TABLE images (
id INT AUTO_INCREMENT PRIMARY KEY,
filename VARCHAR(255) NOT NULL,
title VARCHAR(255) NOT NULL,
description TEXT,
uploaded_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
説明:
- HTML: 画像アップロードフォーム
- PHP:
- ファイルアップロード処理
- ファイル名の取得
- ファイルサイズチェック
- MIMEタイプチェック
- ファイル保存
- データベース接続
- データベースへの保存
- エラー処理
- SQL: データベーステーブル
注意事項:
画像アップロード時にファイル名をデータベースに保存する他の方法
- ファイル名にランダムな文字列を付与することで、ファイル名をユニークにすることができます。
- 例:
md5($filename) . '_' . $filename
ファイル名を暗号化する
- ファイル名を暗号化することで、セキュリティを向上させることができます。
- 例:
openssl_encrypt($filename, $cipher, $key)
ファイル名をデータベースに保存しない
- ファイル名をデータベースに保存せず、ファイルパスのみを保存する方法もあります。
- この方法では、ファイル名の重複を気にしなくて済みます。
クラウドストレージサービスを利用する
- Amazon S3 や Google Cloud Storage などのクラウドストレージサービスを利用することで、ファイルの保存と管理を簡単に行うことができます。
方法の選択
上記の方法はそれぞれメリットとデメリットがあります。
- ファイル名の重複を防ぎたい場合は、ファイル名をハッシュ化または暗号化する必要があります。
- セキュリティを重視する場合は、ファイル名を暗号化するか、クラウドストレージサービスを利用する必要があります。
- ファイル名の検索機能が必要な場合は、ファイル名をデータベースに保存する必要があります。
php mysql database