Hướng dẫn how to store image in postgresql database using php - cách lưu trữ hình ảnh trong cơ sở dữ liệu postgresql bằng php

Nội dung trước tiếp theo

Sửa đổi lần cuối vào ngày 6 tháng 7 năm 2020

Trong chương này của hướng dẫn PHP PostgreSQL, chúng tôi sẽ làm việc với các tệp hình ảnh. Một số người không đồng ý với việc đưa hình ảnh vào cơ sở dữ liệu. Ở đây chúng tôi chỉ chỉ ra cách làm điều đó. Chúng tôi không tập trung vào các vấn đề kỹ thuật về việc có nên lưu hình ảnh trong cơ sở dữ liệu hay không.

testdb=> CREATE TABLE images(id INT PRIMARY KEY, data BYTEA);

Đối với ví dụ này, chúng tôi tạo một bảng mới gọi là hình ảnh. Đối với hình ảnh, chúng tôi sử dụng kiểu dữ liệu

$file_name = "woman.jpg";
1. Nó cho phép lưu trữ chuỗi nhị phân.

Chèn hình ảnh

Trong ví dụ đầu tiên, chúng ta sẽ chèn một hình ảnh vào cơ sở dữ liệu PostgreSQL.

<?php 

$host = "localhost"; 
$user = "user12"; 
$pass = "34klq*"; 
$db = "testdb"; 

$con = pg_connect("host=$host dbname=$db user=$user password=$pass")
    or die ("Could not connect to server\n");

$file_name = "woman.jpg";

$img = fopen($file_name, 'r') or die("cannot read image\n");
$data = fread($img, filesize($file_name));

$es_data = pg_escape_bytea($data);
fclose($img);

$query = "INSERT INTO images(id, data) Values(1, '$es_data')";
pg_query($con, $query); 

pg_close($con); 

?>

Chúng tôi đọc một hình ảnh từ thư mục làm việc hiện tại và ghi nó vào bảng hình ảnh của cơ sở dữ liệu PostgreSQL

$file_name = "woman.jpg";
2.

$file_name = "woman.jpg";

Đây là tên của tệp hình ảnh mà chúng tôi sẽ chèn vào cơ sở dữ liệu. Hình ảnh được đặt trong thư mục làm việc hiện tại.

$img = fopen($file_name, 'r') or die("cannot read image\n");
$data = fread($img, filesize($file_name));

Chúng tôi đọc dữ liệu nhị phân từ hệ thống tập tin.

$es_data = pg_escape_bytea($data);

Dữ liệu nhị phân có thể có các ký tự có thể gây ra vấn đề khi chèn chúng vào bảng cơ sở dữ liệu. Hàm

$file_name = "woman.jpg";
3 thoát khỏi chuỗi để chèn vào
$file_name = "woman.jpg";
4. Sau đó, khi đọc dữ liệu nhị phân từ cơ sở dữ liệu, dữ liệu phải không được giới thiệu.

fclose($img);

Tay cầm trỏ vào tệp hình ảnh được đóng.

$query = "INSERT INTO images(id, data) Values(1, '$es_data')";
pg_query($con, $query); 

Hình ảnh được chèn vào cơ sở dữ liệu.

Đọc hình ảnh

Trong phần này, chúng tôi sẽ thực hiện hoạt động ngược. Chúng tôi sẽ đọc một hình ảnh từ bảng cơ sở dữ liệu.

<?php 

$host = "localhost"; 
$user = "user12"; 
$pass = "34klq*"; 
$db = "testdb"; 

$con = pg_connect("host=$host dbname=$db user=$user password=$pass")
    or die ("Could not connect to server\n");

$query = "SELECT data FROM images WHERE id=1";
$res = pg_query($con, $query) or die (pg_last_error($con)); 

$data = pg_fetch_result($res, 'data');
$unes_image = pg_unescape_bytea($data);

$file_name = "woman2.jpg";
$img = fopen($file_name, 'wb') or die("cannot open image\n");
fwrite($img, $unes_image) or die("cannot write image data\n");
fclose($img);

pg_close($con); 

?>

Chúng tôi đọc dữ liệu hình ảnh từ bảng hình ảnh và ghi nó vào một tệp khác mà chúng tôi gọi là

$file_name = "woman.jpg";
5.

$query = "SELECT data FROM images WHERE id=1";

Dòng này là câu lệnh SQL

$file_name = "woman.jpg";
6 để truy xuất dữ liệu hình ảnh từ bảng.

$data = pg_fetch_result($res, 'data');

Chúng tôi tìm nạp dữ liệu từ cột dữ liệu của bảng

$file_name = "woman.jpg";
7.

<?php 

$host = "localhost"; 
$user = "user12"; 
$pass = "34klq*"; 
$db = "testdb"; 

$con = pg_connect("host=$host dbname=$db user=$user password=$pass")
    or die ("Could not connect to server\n");

$file_name = "woman.jpg";

$img = fopen($file_name, 'r') or die("cannot read image\n");
$data = fread($img, filesize($file_name));

$es_data = pg_escape_bytea($data);
fclose($img);

$query = "INSERT INTO images(id, data) Values(1, '$es_data')";
pg_query($con, $query); 

pg_close($con); 

?>
0

Khi chúng tôi chèn dữ liệu hình ảnh vào cơ sở dữ liệu, chúng tôi đã thoát nó. Bây giờ chúng ta phải hủy bỏ nó trở lại bản gốc.

<?php 

$host = "localhost"; 
$user = "user12"; 
$pass = "34klq*"; 
$db = "testdb"; 

$con = pg_connect("host=$host dbname=$db user=$user password=$pass")
    or die ("Could not connect to server\n");

$file_name = "woman.jpg";

$img = fopen($file_name, 'r') or die("cannot read image\n");
$data = fread($img, filesize($file_name));

$es_data = pg_escape_bytea($data);
fclose($img);

$query = "INSERT INTO images(id, data) Values(1, '$es_data')";
pg_query($con, $query); 

pg_close($con); 

?>
1

Chúng tôi mở một tập tin để viết. Tên tệp mới sẽ là

$file_name = "woman.jpg";
5.

<?php 

$host = "localhost"; 
$user = "user12"; 
$pass = "34klq*"; 
$db = "testdb"; 

$con = pg_connect("host=$host dbname=$db user=$user password=$pass")
    or die ("Could not connect to server\n");

$file_name = "woman.jpg";

$img = fopen($file_name, 'r') or die("cannot read image\n");
$data = fread($img, filesize($file_name));

$es_data = pg_escape_bytea($data);
fclose($img);

$query = "INSERT INTO images(id, data) Values(1, '$es_data')";
pg_query($con, $query); 

pg_close($con); 

?>
2

Dữ liệu được ghi vào hệ thống tập tin.

Phần này của hướng dẫn PHP PostgreSQL được dành riêng để đọc và viết hình ảnh.

Nội dung trước tiếp theo

Tóm tắt: & NBSP; Hướng dẫn này cung cấp các hướng dẫn và một ví dụ để chuyển đổi các tệp lớn như hình ảnh thành các đối tượng lớn nhị phân (BLOBS) có thể được lưu trữ trong cơ sở dữ liệu PostgreSQL sử dụng PHP.

1. Mô tả chương trình ví dụ

2. Cài đặt để cho phép tạo tệp mới

3. Chương trình ví dụ

4. Chạy các chương trình ví dụ

Blob Blob là viết tắt của đối tượng lớn nhị phân và đề cập đến dữ liệu nhị phân thô được lưu trữ trong cơ sở dữ liệu. Blobs có thể là hình ảnh, âm thanh hoặc các định dạng tệp lớn khác. Cơ sở dữ liệu xử lý các đốm khác nhau, và ở đây chúng ta sẽ thấy một ví dụ về cách xử lý hình ảnh trong PostgreSQL và PHP.

Điều kiện tiên quyết

Đối với trình diễn này, chúng tôi sẽ sử dụng các phiên bản phần mềm sau:

1. Centos Linux Phát hành 7.5.1804

2. Postgresql 12

3. Apache 2.4

4. Php 7

Ví dụ về việc sử dụng blob trong ứng dụng PHP

1. Mô tả chương trình ví dụ

Chương trình PHP ví dụ sẽ chèn một hình ảnh, bằng cách đọc nó bằng các đoạn, vào cơ sở dữ liệu PostgreSQL dưới dạng pg_largeobject. Chương trình sau đó sẽ đọc dữ liệu hình ảnh được chèn vào các khối và sẽ lưu nó trong một tệp hình ảnh mới.

Chương trình sau đó sẽ hiển thị cả hai hình ảnh. OID (định danh đối tượng) của hình ảnh được chèn sẽ được lưu trữ trong bảng sau:

<?php 

$host = "localhost"; 
$user = "user12"; 
$pass = "34klq*"; 
$db = "testdb"; 

$con = pg_connect("host=$host dbname=$db user=$user password=$pass")
    or die ("Could not connect to server\n");

$file_name = "woman.jpg";

$img = fopen($file_name, 'r') or die("cannot read image\n");
$data = fread($img, filesize($file_name));

$es_data = pg_escape_bytea($data);
fclose($img);

$query = "INSERT INTO images(id, data) Values(1, '$es_data')";
pg_query($con, $query); 

pg_close($con); 

?>
3

2. Cài đặt để cho phép tạo tệp mới

Hãy chắc chắn rằng bạn có các cài đặt sau được cấu hình trong máy chủ Apache:

<?php 

$host = "localhost"; 
$user = "user12"; 
$pass = "34klq*"; 
$db = "testdb"; 

$con = pg_connect("host=$host dbname=$db user=$user password=$pass")
    or die ("Could not connect to server\n");

$file_name = "woman.jpg";

$img = fopen($file_name, 'r') or die("cannot read image\n");
$data = fread($img, filesize($file_name));

$es_data = pg_escape_bytea($data);
fclose($img);

$query = "INSERT INTO images(id, data) Values(1, '$es_data')";
pg_query($con, $query); 

pg_close($con); 

?>
4

3. Chương trình ví dụ

Bây giờ, hãy để tạo ra chương trình bằng PHP.

<?php 

$host = "localhost"; 
$user = "user12"; 
$pass = "34klq*"; 
$db = "testdb"; 

$con = pg_connect("host=$host dbname=$db user=$user password=$pass")
    or die ("Could not connect to server\n");

$file_name = "woman.jpg";

$img = fopen($file_name, 'r') or die("cannot read image\n");
$data = fread($img, filesize($file_name));

$es_data = pg_escape_bytea($data);
fclose($img);

$query = "INSERT INTO images(id, data) Values(1, '$es_data')";
pg_query($con, $query); 

pg_close($con); 

?>
5

Tạo tệp sau PG_LO_IMG_TO_DB.PHP tại vị trí trên với nội dung như hiển thị bên dưới:

pg_lo_img_to_db.php

<?php 

$host = "localhost"; 
$user = "user12"; 
$pass = "34klq*"; 
$db = "testdb"; 

$con = pg_connect("host=$host dbname=$db user=$user password=$pass")
    or die ("Could not connect to server\n");

$file_name = "woman.jpg";

$img = fopen($file_name, 'r') or die("cannot read image\n");
$data = fread($img, filesize($file_name));

$es_data = pg_escape_bytea($data);
fclose($img);

$query = "INSERT INTO images(id, data) Values(1, '$es_data')";
pg_query($con, $query); 

pg_close($con); 

?>
6

Bây giờ, hãy tạo tệp sau pg_lo_img_from_db.php tại vị trí trên với nội dung như hiển thị bên dưới:

pg_lo_img_from_db.php

<?php 

$host = "localhost"; 
$user = "user12"; 
$pass = "34klq*"; 
$db = "testdb"; 

$con = pg_connect("host=$host dbname=$db user=$user password=$pass")
    or die ("Could not connect to server\n");

$file_name = "woman.jpg";

$img = fopen($file_name, 'r') or die("cannot read image\n");
$data = fread($img, filesize($file_name));

$es_data = pg_escape_bytea($data);
fclose($img);

$query = "INSERT INTO images(id, data) Values(1, '$es_data')";
pg_query($con, $query); 

pg_close($con); 

?>
7

Tạo tệp sau Disp_imgs.html tại vị trí trên với nội dung như hiển thị bên dưới:

disp_imgs.html 

<?php 

$host = "localhost"; 
$user = "user12"; 
$pass = "34klq*"; 
$db = "testdb"; 

$con = pg_connect("host=$host dbname=$db user=$user password=$pass")
    or die ("Could not connect to server\n");

$file_name = "woman.jpg";

$img = fopen($file_name, 'r') or die("cannot read image\n");
$data = fread($img, filesize($file_name));

$es_data = pg_escape_bytea($data);
fclose($img);

$query = "INSERT INTO images(id, data) Values(1, '$es_data')";
pg_query($con, $query); 

pg_close($con); 

?>
8

Cập nhật tệp index.html tại vị trí trên với nội dung như hiển thị bên dưới:

index.html 

<?php 

$host = "localhost"; 
$user = "user12"; 
$pass = "34klq*"; 
$db = "testdb"; 

$con = pg_connect("host=$host dbname=$db user=$user password=$pass")
    or die ("Could not connect to server\n");

$file_name = "woman.jpg";

$img = fopen($file_name, 'r') or die("cannot read image\n");
$data = fread($img, filesize($file_name));

$es_data = pg_escape_bytea($data);
fclose($img);

$query = "INSERT INTO images(id, data) Values(1, '$es_data')";
pg_query($con, $query); 

pg_close($con); 

?>
9

Tải xuống logo Postgres từ trang web sau https://commons.wikimedia.org/wiki/file:postgresql_elephant.svg và đặt tệp hình ảnh dưới dạng pg.png at/var/www/html.

4. Chạy các chương trình ví dụ

Sao chép hình ảnh từ hệ thống tệp đến đối tượng lớn:

Hướng dẫn how to store image in postgresql database using php - cách lưu trữ hình ảnh trong cơ sở dữ liệu postgresql bằng php

Nhấp vào hình ảnh sao chép trên mạng dưới dạng một đối tượng lớn trong liên kết cơ sở dữ liệu:

Hướng dẫn how to store image in postgresql database using php - cách lưu trữ hình ảnh trong cơ sở dữ liệu postgresql bằng php

Bây giờ hãy kiểm tra hình ảnh được chèn vào cơ sở dữ liệu:

$file_name = "woman.jpg";
0

Đọc hình ảnh từ đối tượng lớn và sao chép nó vào một tệp:

Nhấp vào hình ảnh Nhận hình ảnh dưới dạng đối tượng lớn từ liên kết cơ sở dữ liệu:

Hướng dẫn how to store image in postgresql database using php - cách lưu trữ hình ảnh trong cơ sở dữ liệu postgresql bằng php

Hiển thị cả hai hình ảnh:

Nhấp vào liên kết hiển thị trên cả hai hình ảnh.

Hướng dẫn how to store image in postgresql database using php - cách lưu trữ hình ảnh trong cơ sở dữ liệu postgresql bằng php

Chúng ta có thể lưu trữ hình ảnh trong cơ sở dữ liệu PostgreSQL không?

Hình ảnh PostgreSQL có thể được chạy với khối lượng được gắn để cho phép lưu trữ liên tục cho cơ sở dữ liệu:/var/lib/pgsql/data - Đây là thư mục cụm cơ sở dữ liệu nơi các tệp cơ sở dữ liệu lưu trữ PostgreSQL.: /var/lib/pgsql/data - This is the database cluster directory where PostgreSQL stores database files.

Làm thế nào tôi có thể lưu trữ hình ảnh trong PHP?

Lưu trữ tệp hình ảnh trong cơ sở dữ liệu (Tải lên ...
Kiểm tra xem người dùng chọn tệp hình ảnh để tải lên ..
Truy xuất nội dung của tệp hình ảnh bằng TMP_NAME bằng cách sử dụng hàm PHP File_Get_Contents () ..
Chèn nội dung nhị phân của hình ảnh vào cơ sở dữ liệu bằng PHP và MySQL ..
Hiển thị trạng thái tải lên hình ảnh lên người dùng ..

Làm cách nào để chèn một hình ảnh vào bảng Postgres?

Tạo hình ảnh bảng (văn bản imgname, IMG bytea);Để chèn một hình ảnh, bạn sẽ sử dụng: Tệp tệp = Tệp mới ("myImage.gif");FileInputStream fis = new FileInputStream (tệp);PREPPREPHATEMENT PS = Conn.File file = new File("myimage. gif"); FileInputStream fis = new FileInputStream(file); PreparedStatement ps = conn.

Bạn có thể lưu trữ hình ảnh trong cơ sở dữ liệu không?

Một cơ sở dữ liệu cho bạn cơ hội lưu trữ ảnh và các hình ảnh nhỏ khác trong bảng cơ sở dữ liệu.Bạn có thể tạo một bảng cơ sở dữ liệu như vậy chẳng hạn khi bạn muốn tạo một album ảnh trực tuyến với các mô tả về ảnh của bạn.Lưu trữ hình ảnh trong bảng cơ sở dữ liệu không được khuyến khích.. You can create such a database table for example when you want to create an online photo album with descriptions of your photos. Storing images in a database table is not recommended.