3

HTMLフォームから画像を送信して、PHPを使用してMySQLに画像ファイルを保存するにはどうすればよいですか? 私は、MySQL と HTML の部分しか知りません。

HTMLフォームは次のとおりです。

<form method="post" enctype="multipart/form-data" action="insert_image.php">
    <input type="file" name="image" />
    <input type="submit" />
</form>

データベースに接続して通常の情報を保存する方法は知っていますが、データを正しく解析して画像ファイルを MySQL BLOB フィールドに保存するにはどうすればよいですか? また、MySQL から表示するにはどうすればよいですか?

ps: PDO を使用してデータベース接続を行っています。

4

5 に答える 5

6
<?php

# getting the uploaded image and storing it
if ( isset($_FILES['image']['tmp_name']) ) {
    // open mysqli db connection
    $mysqli = new mysqli($mysqliHost,$mysqliUsername,$mysqliPassword,$mysqliDatabase);

    // get image data
    $binary = file_get_contents($_FILES['image']['tmp_name']);

    // get mime type
    $finfo = new finfo(FILEINFO_MIME);
    $type = $finfo->file($_FILES['image']['tmp_name']);
    $mime = substr($type, 0, strpos($type, ';'));

    $query = "INSERT INTO `images` 
                    (`data`,`mime`,`name`) 
    VALUES('".$mysqli->real_escape_string($binary)."',
            '".$mysqli->real_escape_string($mime)."',
            '".$mysqli->real_escape_string($_FILES['image']['name'])."')";
    $mysqli->query($query);
}

# viewing the uploaded image
if ( isset($_GET['imageName']) ) {
    // open mysqli db connection
    $mysqli = new mysqli($mysqliHost,$mysqliUsername,$mysqliPassword,$mysqliDatabase);

    // query for the image in the db
    $query = "SELECT `data`,`mime` FROM `images` WHERE `name`='".$mysqli->real_escape_string($_GET['imageName'])."'";
    $result = $mysql->query($query);


    if ( $result->num_rows ) {
        // grab the query result from the db select
        $assoc = $result->fetch_assoc();

        // let the client browser know what type of data you're sending
        header('Content-type: '.$assoc['mime']);

        // dump the binary data to the browser
        echo $assoc['data'];
        exit;
    } else {
        header('HTTP/1.1 404 Not Found');
        exit;
    }
}

?>

私のスクリプトは同じ名前の画像を考慮していません。 $_FILES['image']['name'] と書かれている部分を、一意の名前を持つ/作成する別の変数に交換するか、挿入されたID (PRIMARY AUTO_INCREMENT MySQL キー)。

サンプル テーブル スキーマを次に示します。

CREATE TABLE `images` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `data` longblob NOT NULL,
  `mime` varchar(50) NOT NULL,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
于 2013-03-28T00:34:57.370 に答える
1

実際のベスト プラクティスでは、イメージを何らかのフォルダーに保存し、パスまたは名前をデータベースに保存する必要があると述べています。

これはあなたを助けることができます: http://www.htmlgoodies.com/beyond/php/article.php/3877766/Web-Developer-How-To-Upload-Images-Using-PHP.htm

PHP URL からの画像の保存

于 2013-03-28T00:12:34.930 に答える
1

データベースに保存するものは何でも同じです。クエリ文字列に追加するときに、保存するバイトを取得してエスケープします。

これは次のようなものです:

$image = file_get_contents($image_file_name);
$query = "INSERT INTO img SET image = \"".mysqli_real_escape_string($image)."\"";
于 2013-03-28T00:10:21.440 に答える
0

アップロードされた画像ファイルの生のコンテンツを実際に取得してfile_get_contentsエスケープし、DB に blob として保存できます。それを表示するには、適切な content-type を設定した後、実際にブロブをエコーアウトするだけです。

しかし、私はそのようにはしません。代わりに、イメージをディスクに保存し、イメージ ファイルの場所を MySQL に保存します。

于 2013-03-28T00:12:19.287 に答える
0

個人的には、このようなものを必要とするサイト (このサイト) を作成したとき、ファイルをファイル システムに保存し、ディレクトリをデータベースに追加して、各 jpg に一意のファイル名を付けました。

于 2013-03-28T00:18:49.473 に答える