PHPを使用してMySQLデータベースから画像を保存して取得する

一般に、PHPで画像ファイルをアップロードすると、アップロードされた画像はサーバーのディレクトリに保存され、それぞれの画像名はデータベースに保存されます。 表示時には、ファイルがサーバーから取得され、画像がwebページにレンダリングされます。 ただし、サーバーのスペースを消費したくない場合は、ファイルをデータベースにのみ保存できます。 MySQLデータベースを使用して、サーバー上にファイルを物理的に保存せずにイメージをアップロードできます。 PHPとMySQLを使用してデータベースから画像を保存して取得するのは非常に簡単です。

サーバーの空き容量が気になり、サーバーに空き容量が必要な場合は、サーバーのディレクトリにアップロードせずにイメージファイルをデータベースに直接挿入 この手順は、イメージファイルの内容がサーバーではなくデータベースに格納されるため、サーバー領域を最適化するのに役立ちます。 このチュートリアルでは、イメージファイルをMySQLデータベースに保存し、PHPを使用してデータベースからイメージを取得する方法を説明します。

ファイルアップロードとデータベースの統合を開始する前に、ファイル構造を見てみましょう。

store_retrieve_image_from_database/├── dbConfig.php├── index.php├── upload.php├── view.php└── css/ └── style.css

MySQLにイメージファイルを挿入

MySQLには、大量のバイナリデータを保持できるBLOB(binary large object)データ型があります。 BLOBデータ型は、イメージデータをデータベースに格納するのに最適です。 MySQLでは、TINYBLOB、BLOB、MEDIUMBLOB、およびLONGBLOBの4つのBLOBタイプが使用できます。 LONGBLOBデータ型は、画像ファイルのデータを格納するのに最適です。

Create Database Table

ファイルの内容を格納するには、データベースにテーブルが必要です。 次のSQLは、MySQLデータベースにLONGBLOBデータ型フィールドを持つimagesテーブルを作成します。

CREATE TABLE`images`(`id`int(11)NOT NULL AUTO_INCREMENT,`image`longblob NOT NULL,`created`datetime NOT NULL DEFAULT current_timestamp(),PRIMARY KEY(`id`))ENGINE=InnoDB DEFAULT CHARSET=utf8COLLATE=utf8_unicode_ci;

データベース構成(dbConfig.php)

dbConfig.phpファイルを使用してデータベースを接続し、選択します。 MySQLデータベースの資格情報に従って、データベースホスト($dbHost)、ユーザー名($dbUsername)、パスワード($dbPassword)、および名前($dbName)を指定します。

<?php 
// Database configuration
$dbHost = "localhost";
$dbUsername = "root";
$dbPassword = "root";
$dbName = "codexworld";
// Create database connection
$db = new mysqli($dbHost, $dbUsername, $dbPassword, $dbName);
// Check connection
if ($db->connect_error) {
die("Connection failed: " . $db->connect_error);
}

画像アップロードフォーム

アップロードする画像ファイルを選択するファイル入力フィールドを持つHTMLフォームを作成します。 <フォーム>タグに次の属性が含まれていることを確認します。

  • method=”post”
  • enctype=”multipart/form-data””
<フォームアクション="アップロード。php"method="post"enctype="multipart/form-data"><label>画像ファイルを選択します。</label><input type="file"name="image"><input type="submit"name="submit"value="Upload"></form>

画像ファイルをデータベースに保存(アップロード。php)

upload.phpファイルは、画像のアップロードとデータベースの挿入プロセスを処理します。

  • ユーザーがアップロードする画像ファイルを選択するかどうかを確認します。
  • PHP file_get_contents()関数を使用してtmp_nameで画像ファイルの内容を取得します。
  • PHPとMySQLを使用して、イメージのバイナリコンテンツをデータベースに挿入します。
  • ユーザーに画像のアップロード状況を表示します。
<?php 
// Include the database configuration file
require_once 'dbConfig.php';
// If file upload form is submitted
$status = $statusMsg = '';
if(isset($_POST)){
$status = 'error';
if(!empty($_FILES)) {
// Get file info
$fileName = basename($_FILES);
$fileType = pathinfo($fileName, PATHINFO_EXTENSION);
// Allow certain file formats
$allowTypes = array('jpg','png','jpeg','gif');
if(in_array($fileType, $allowTypes)){
$image = $_FILES;
$imgContent = addslashes(file_get_contents($image));
// Insert image content into database
$insert = $db->query("INSERT into images (image, created) VALUES ('$imgContent', NOW())");
if($insert){
$status = 'success';
$statusMsg = "File uploaded successfully.";
}else{
$statusMsg = "File upload failed, please try again.";
}
}else{
$statusMsg = 'Sorry, only JPG, JPEG, PNG, & GIF files are allowed to upload.';
}
}else{
$statusMsg = 'Please select an image file to upload.';
}
}
// Display status message
echo $statusMsg;
?>

データベースから画像を取得する(ビュー。php)

view.phpファイルでは、MySQLデータベースからイメージコンテンツを取得し、webページに一覧表示します。

  • src属性のdata、charset、およびbase64パラメータは、MySQLデータベースからのイメージBLOBを表示するために使用されます。
<?php 
// Include the database configuration file
require_once 'dbConfig.php';
// Get image data from database
$result = $db->query("SELECT image FROM images ORDER BY id DESC");
?><?php if($result->num_rows > 0){ ?>
<div class="gallery">
<?php while($row = $result->fetch_assoc()){ ?>
<img src="data:image/jpg;charset=utf8;base64,<?php echo base64_encode($row); ?>" />
<?php } ?>
</div>
<?php }else{ ?>
<p class="status error">Image(s) not found...</p>
<?php } ?>

複数の画像をアップロードし、PHPとMySQLを使用してデータベースに保存

結論

このチュートリアルでは、サーバーにファイルを保存せずにファイルアップロード機能を統合するのに役立ちます。 このサンプルスクリプトを使用して、データベースに&ストア画像をアップロードし、データベースから画像を取得し、PHPとMySQLを使用してwebページに表示できます。 画像のアップロードプロセスをユーザーフレンドリーにするには、Jqueryを使用してAjaxとPHPを使用してプログレスバーでファイルをアップロードします。

実装のヘルプを取得したり、このスクリプトの機能を変更または強化したりしますか? 有料サービスリクエストを送信

このスクリプトについてご質問がある場合は、QAコミュニティに送信してください-質問をする

コメントを残す

メールアドレスが公開されることはありません。