PHP를 사용하여 MySQL 데이터베이스에서 이미지를 저장하고 검색하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/1636877

  •  06-07-2019
  •  | 
  •  

문제

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?

내 의견은 이미지를 데이터베이스에 직접 저장하는 대신 이미지 위치를 데이터베이스에 저장하는 것이 좋습니다. 두 옵션을 모두 비교할 때 데이터베이스에 이미지를 저장하는 것은 보안 목적에 안전합니다. 단점입니다

  1. 데이터베이스가 손상되면 검색 할 방법이 없습니다.

  2. 다른 옵션과 비교할 때 DB에서 이미지 파일을 검색하는 데 속도가 느립니다.

반면 DB에 이미지 파일 위치를 저장하면 다음과 같은 장점이 있습니다.

  1. 검색하기 쉽습니다.

  2. 둘 이상의 이미지가 저장되면 이미지 정보를 쉽게 검색 할 수 있습니다.

개인적으로 이미지를 데이터베이스에 저장하지 않고 대신 외부에서 액세스 할 수없는 폴더에 넣고 위치를 추적하기 위해 데이터베이스를 사용합니다. 데이터베이스 크기를 낮추고 PHP를 사용하여 포함시킬 수 있습니다. PHP가 없으면 해당 이미지에 액세스 할 방법이 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top