CREATE DATABASE binary_data;
USE binary_data;
CREATE TABLE binary_data (
id INT(4) NOT NULL AUTO_INCREMENT PRIMARY KEY,
description CHAR(50),
bin_data LONGBLOB,
filename CHAR(50),
filesize CHAR(50),
filetype CHAR(50)
) ENGINE=InnoDB;
LONGBLOB:最大 4GB,適合圖片、文件、HTML 等二進位內容。store.php<?php
// store.php
if (isset($_POST['submit'])) {
$conn = mysqli_connect("localhost", "root", "password", "binary_data");
$data = addslashes(file_get_contents($_FILES['form_data']['tmp_name']));
$sql = "INSERT INTO binary_data (description, bin_data, filename, filesize, filetype)
VALUES ('{$_POST['form_description']}', '$data', '{$_FILES['form_data']['name']}',
'{$_FILES['form_data']['size']}', '{$_FILES['form_data']['type']}')";
mysqli_query($conn, $sql);
$id = mysqli_insert_id($conn);
echo "檔案已存儲,Database ID: $id";
mysqli_close($conn);
} else {
?>
getdata.php<?php
// getdata.php?id=3
$id = (int)$_GET['id'];
$conn = mysqli_connect("localhost", "root", "password", "binary_data");
$sql = "SELECT bin_data, filetype FROM binary_data WHERE id=$id";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($result);
header("Content-Type: {$row['filetype']}");
echo $row['bin_data'];
mysqli_close($conn);
<img src="getdata.php?id=3" alt="資料庫圖片">
<a href="getdata.php?id=5">下載文件</a>
| 層級 | 設定 | 建議值 |
|---|---|---|
| HTML 表單 | <input type="hidden" name="MAX_FILE_SIZE" value="..."> | 24000000 (24MB) |
| PHP (php.ini) | upload_max_filesize, post_max_size | 24M |
| MySQL 連線 | max_allowed_packet | 24M (啟動參數 --max_allowed_packet=24M) |
| MySQL 緩衝區 | key_buffer, table_cache, sort_buffer, record_buffer | 視記憶體調整 |
啟動命令範例:/usr/local/bin/mysqld_safe -O key_buffer=16M -O table_cache=128 -O sort_buffer=4M -O record_buffer=1M -O max_allowed_packet=24M