一般に、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コミュニティに送信してください-質問をする