PHP를 사용하여 MySQL 데이터베이스에서 이미지를 저장하고 검색하려면 어떻게해야합니까?
MySQL에 이미지를 삽입 한 다음 PHP를 사용하여 검색하려면 어떻게해야합니까?
나는 어느 분야에서든 경험이 제한되어 있으며, 이것을 알아 내기 위해 약간의 코드를 사용할 수 있습니다.
먼저 다음과 같이 이미지를 저장할 MySQL 테이블을 만듭니다.
create table testblob (
image_id tinyint(3) not null default '0',
image_type varchar(25) not null default '',
image blob not null,
image_size varchar(25) not null default '',
image_ctgy varchar(25) not null default '',
image_name varchar(50) not null default ''
);
그런 다음 다음과 같이 데이터베이스에 이미지를 쓸 수 있습니다.
/***
* All of the below MySQL_ commands can be easily
* translated to MySQLi_ with the additions as commented
***/
$imgData = file_get_contents($filename);
$size = getimagesize($filename);
mysql_connect("localhost", "$username", "$password");
mysql_select_db ("$dbname");
// mysqli
// $link = mysqli_connect("localhost", $username, $password,$dbname);
$sql = sprintf("INSERT INTO testblob
(image_type, image, image_size, image_name)
VALUES
('%s', '%s', '%d', '%s')",
/***
* For all mysqli_ functions below, the syntax is:
* mysqli_whartever($link, $functionContents);
***/
mysql_real_escape_string($size['mime']),
mysql_real_escape_string($imgData),
$size[3],
mysql_real_escape_string($_FILES['userfile']['name'])
);
mysql_query($sql);
다음을 사용하여 데이터베이스의 이미지를 웹 페이지에 표시 할 수 있습니다.
$link = mysql_connect("localhost", "username", "password");
mysql_select_db("testblob");
$sql = "SELECT image FROM testblob WHERE image_id=0";
$result = mysql_query("$sql");
header("Content-type: image/jpeg");
echo mysql_result($result, 0);
mysql_close($link);
데이터베이스에 이미지를 저장하는 대신 디스크의 폴더에 이미지를 저장하고 데이터베이스에 위치를 저장하십시오.
DB에서 이미지를 제공하는 것은 일반적으로 디스크에서 제공하는 것보다 훨씬 느립니다.
PHP 프로세스를 시작하고, DB 연결을 열고, DB가 파일 시스템과 동일한 디스크 및 RAM에서 이미지 데이터를 읽도록하고, 몇 개의 소켓과 버퍼를 통해 전송 한 다음 PHP를 통해 푸시합니다. 캐시 할 수 없으며 청크 된 HTTP 인코딩의 오버 헤드를 추가합니다.
OTOH 최신 웹 서버는 최적화 된 커널 호출 (메모리 매핑 된 파일 및 TCP 스택에 전달 된 해당 메모리 영역)만으로 이미지를 제공 할 수 있으므로 메모리를 복사하지 않고 오버 헤드도 거의 없습니다.
이는 하나의 시스템에서 20 개 또는 2000 개의 이미지를 병렬로 제공 할 수있는 것의 차이입니다.
So don't do it unless you absolutely need transactional integrity (and actually even that can be done with just image metadata in DB and filesystem cleanup routines) and know how to improve PHP's handling of HTTP to be suitable for images.
i also recommend thinking this thru and then choosing to store images in your file system rather than the DB .. see here: Storing Images in DB - Yea or Nay?
My opinion is, Instead of storing images directly to the database, It is recommended to store the image location in the database. As we compare both options, Storing images in the database is safe for security purpose. Disadvantage are
If database is corrupted, no way to retrieve.
Retrieving image files from db is slow when compare to other option.
On the other hand, storing image file location in db will have following advantages.
It is easy to retrieve.
If more than one images are stored, we can easily retrieve image information.
Personally i wouldnt store the image in the database, Instead put it in a folder not accessable from outside, and use the database for keeping track of its location. keeps database size down and you can just include it by using PHP. There would be no way without PHP to access that image then
'IT박스' 카테고리의 다른 글
보안 문자열을 일반 텍스트로 변환 (0) | 2020.12.10 |
---|---|
Haskell의 대수 데이터 유형 (0) | 2020.12.10 |
Laravel에서 요청 매개 변수의 값을 변경하는 방법 (0) | 2020.12.10 |
신뢰할 수있는 연결이란 무엇입니까? (0) | 2020.12.09 |
jQuery를 사용하여 동적으로 행 추가 (0) | 2020.12.09 |