복붙노트

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

PHP

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

MySQL에 이미지를 삽입 한 다음 PHP를 사용하여 이미지를 검색하려면 어떻게해야합니까?

나는 양쪽 영역에서 경험이 제한되어 있으며, 이것을 이해하기 위해 약간의 코드를 사용할 수 있습니다.

해결법

  1. ==============================

    1.먼저 이미지를 저장하는 MySQL 테이블을 생성합니다 (예 :

    먼저 이미지를 저장하는 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);
    
  2. ==============================

    2.데이터베이스에 이미지를 저장하는 대신 디스크의 폴더에 이미지를 저장하고 데이터베이스에 위치를 저장하십시오.

    데이터베이스에 이미지를 저장하는 대신 디스크의 폴더에 이미지를 저장하고 데이터베이스에 위치를 저장하십시오.

  3. ==============================

    3.DB에서 이미지를 제공하는 것은 대개 디스크에서 제공하는 것보다 훨씬 더 느립니다.

    DB에서 이미지를 제공하는 것은 대개 디스크에서 제공하는 것보다 훨씬 더 느립니다.

    PHP 프로세스를 시작하고 DB 연결을 열고 데이터베이스가 동일한 디스크의 이미지 데이터를 읽고 파일 시스템처럼 캐시 용 RAM을 가져 와서 몇 개의 소켓과 버퍼를 통해 전송 한 다음 PHP를 통해 푸시 아웃합니다. 그것은 캐싱 할 수없고 청크 분할 된 HTTP 인코딩의 오버 헤드를 추가합니다.

    OTOH의 최신 웹 서버는 메모리 최적화 된 커널 호출 (메모리 매핑 파일과 메모리 영역이 TCP 스택으로 전달됨)만으로 이미지를 제공 할 수 있으므로 메모리를 복사하지 않고 거의 오버 헤드가 없습니다.

    이는 한 대의 컴퓨터에서 20 개 또는 2000 개의 이미지를 동시에 처리 할 수 ​​있다는 것의 차이입니다.

    따라서 트랜잭션 무결성을 절대적으로 필요로하지 않는 한 (실제로 DB 및 파일 시스템 정리 루틴의 이미지 메타 데이터만으로 수행 할 수있는 경우가 아니면) PHP의 이미지 처리에 대한 PHP 처리 방법을 개선해야합니다.

  4. ==============================

    4.나는 또한 이것을 생각하고 DB가 아닌 파일 시스템에 이미지를 저장하도록 선택하는 것이 좋습니다. 여기를 참조하십시오 : DB에 이미지 저장하기 - 네이 또는 아닐까요?

    나는 또한 이것을 생각하고 DB가 아닌 파일 시스템에 이미지를 저장하도록 선택하는 것이 좋습니다. 여기를 참조하십시오 : DB에 이미지 저장하기 - 네이 또는 아닐까요?

  5. ==============================

    5.내 생각에, 이미지를 데이터베이스에 직접 저장하는 대신 데이터베이스에 이미지 위치를 저장하는 것이 좋습니다. 두 옵션을 비교할 때 데이터베이스에 이미지를 저장하는 것은 보안상의 이유로 안전합니다. 단점은

    내 생각에, 이미지를 데이터베이스에 직접 저장하는 대신 데이터베이스에 이미지 위치를 저장하는 것이 좋습니다. 두 옵션을 비교할 때 데이터베이스에 이미지를 저장하는 것은 보안상의 이유로 안전합니다. 단점은

    반면에, 이미지 파일 위치를 db에 저장하는 것은 다음과 같은 이점을 갖습니다.

  6. ==============================

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

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

  7. from https://stackoverflow.com/questions/1636877/how-can-i-store-and-retrieve-images-from-a-mysql-database-using-php by cc-by-sa and MIT license