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의 이미지를 제공하는 것은 일반적으로 많은 것입니다. 많이 디스크에서 제공하는 것보다 느리게.
파일 시스템과 동일한 디스크 및 RAM에서 DB를 읽고 DB 연결을 시작하고 파일 시스템과 동일한 디스크 및 RAM에서 DB를 읽고 소켓과 버퍼를 몇 가지로 전송 한 다음 기본적으로 기본적으로 Making Makes를 통해 밀어 넣을 것입니다. 성과를 거두지 못하고 청크 된 HTTP 인코딩의 오버 헤드를 추가합니다.
OTOH 최신 웹 서버는 최적의 최적화 된 커널 호출 (메모리 매핑 파일 및 해당 메모리 영역이 TCP 스택으로 전달됨)으로 이미지를 제공 할 수 있으므로 메모리를 복사하지 않고 오버 헤드가 거의 없습니다.
이는 한 기계에서 20 또는 2000 이미지를 병렬로 제공 할 수있는 것의 차이입니다.
그러니하지 마십시오 트랜잭션 무결성이 절대적으로 필요하지 않는 한 (실제로 DB 및 파일 시스템 정리 루틴의 이미지 메타 데이터만으로 수행 할 수 있음) PHP의 HTTP 처리를 개선하여 이미지에 적합한 방법을 알고 있습니다.
또한 이것을 생각하고 DB가 아닌 파일 시스템에 이미지를 저장하는 것이 좋습니다. 여기를 참조하십시오. DB에서 이미지 저장 - 예 또는 Nay?
내 의견은 이미지를 데이터베이스에 직접 저장하는 대신 이미지 위치를 데이터베이스에 저장하는 것이 좋습니다. 두 옵션을 모두 비교할 때 데이터베이스에 이미지를 저장하는 것은 보안 목적에 안전합니다. 단점입니다
데이터베이스가 손상되면 검색 할 방법이 없습니다.
다른 옵션과 비교할 때 DB에서 이미지 파일을 검색하는 데 속도가 느립니다.
반면 DB에 이미지 파일 위치를 저장하면 다음과 같은 장점이 있습니다.
검색하기 쉽습니다.
둘 이상의 이미지가 저장되면 이미지 정보를 쉽게 검색 할 수 있습니다.
개인적으로 이미지를 데이터베이스에 저장하지 않고 대신 외부에서 액세스 할 수없는 폴더에 넣고 위치를 추적하기 위해 데이터베이스를 사용합니다. 데이터베이스 크기를 낮추고 PHP를 사용하여 포함시킬 수 있습니다. PHP가 없으면 해당 이미지에 액세스 할 방법이 없습니다.