1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
<?php
/* ---------------------------------------------------------------------------------------------
 *  [入力ファイルから指定サイズのサムネール画像をDBにBLOB形式で保存する処理]のサンプルプログラム
 *  --------------
 * 2016.09.11 作成 Yoshi of CXMedia Inc.
 * --------------------------------------------------------------------------------------------- */
/* -----------------------#
 *      初期設定
 * -----------------------*/
// 画像タイプ:拡張子チェックテーブル
$extension_type = array('jpg','jpeg','gif','png');
// サムネール(縮小)サイズ
$thumb_size '320x320';

/* ----------------------------------------#
 *    データベースの接続定義とCRUD class
 * ----------------------------------------*/
// MySQLデータベース接続の初期設定
$db_def = array(
    
'DBhost'  => 'localhost',       //接続サーバ(URL)
    
'DBuser'  => 'user',            //DB接続のユーザ名
    
'DBpwd'   => 'eLerning_PWD',    //DB接続のパスワード
    
'DBname'  => 'list_db',         //接続データベース名
    
'DBtblm'  => 'mediaManagement'  //テーブル名
);
// DB接続状況をチェックとオブジェクト作成
$db mysqli_connect($db_def['DBhost'], $db_def['DBuser'], $db_def['DBpwd'], $db_def['DBname']);

// MySQL接続の成功メッセージ表示
echo "■MySQLi:「{$db_def['DBname']}」のデータベース接続(レコードの挿入)!",'<br>'

/* ---------------------------------------------------------------
 *     「レコードの挿入」のinsert()のsql実行
 * --------------------------------------------------------------- */
//エラーが発生した時にセットされる(参照渡し)
$err_msg;
// 【1個目】レコード挿入のデータ(参照渡し:DB保存されるとDB情報がセットされます)
$inpData_1 = array(
    
'media_path'      => 'img_sample/Base_image.jpg',  //ベースメディア・パス
    
'media_thumbimg'  => '',      //サムネール画像
    
'media_info'      => ''       //メディア情報
);
// 画像の拡張子チェック、指定したサムネール画像の生成とDB保存
fileBLOB_insert($db,$inpData_1,$err_msg);
// 上記ユーザー関数でエラーが発生したかの判断
if($err_msg){
    echo 
$err_msg,'<br>';
} else {
    
// 成功したSQL文の表示
    
echo 'レコード挿入の成功!<br>';
    
// 直近の挿入したレコードのID(auto_increment)の表示
    
echo '直近のInsertIDは、',mysqli_insert_id($db),'<br>'
}

// 【2個目】レコード挿入のデータ(参照渡し:DB保存されるとDB情報がセットされます)
$inpData_2 = array(
    
'media_path'      => 'img_sample/spiralObject.png',  //ベースメディア・パス
    
'media_thumbimg'  => '',      //サムネール画像
    
'media_info'      => ''       //メディア情報
);
// 画像の拡張子チェック、指定したサムネール画像の生成とDB保存
fileBLOB_insert($db,$inpData_2,$err_msg);
// 上記ユーザー関数でエラーが発生したかの判断
if($err_msg){
    echo 
$err_msg,'<br>';
} else {
    
// 成功したSQL文の表示
    
echo 'レコード挿入の成功!<br>';
    
// 直近の挿入したレコードのID(auto_increment)の表示
    
echo '直近のInsertIDは、',mysqli_insert_id($db),'<br>'
}

/* ------------------------------------------------------#
 *      ファイルの画像BLOB保存:Insert
 * ----------------------------------------------------- */
function fileBLOB_insert($db,&$inp_data,&$error_msg){
global 
$extension_type,$thumb_size,$db_def;
    
//エラーメッセージをクリア
    
$error_msg '';
    
    
//画像データファイルの存在チェック
    
if(file_exists($inp_data['media_path'])){
        
// 入力ファイルの拡張子の取得
        
$ext_file ext_fileget($inp_data['media_path']);
        
// ファイルの拡張子のチェック //
        
if( !in_array($ext_file,$extension_type) ){
            
$error_msg "■エラー:{$inp_data['media_path']}は、画像ファイル対象の拡張子ではありません。";
            return;
        }
    } else {
        
$error_msg "■エラー:ファイル名:{$inp_data['media_path']}が存在しません。";
        return;
    }
    
//一時的に作成した保存画像パス
    
$outimg_path 'temp/'.basename($inp_data['media_path']);
    
    
/* ------------------------------------------#
     *  Imagickによる画像サイズ編集メモリー出力
     * ----------------------------------------- */
    // ベース画像のインスタンス
    
$img_base = new Imagick(realpath($inp_data['media_path']));
    
    
// 入力ファイルの画像サイズの取得
    
list($width$height) = getimagesize($inp_data['media_path']);
    
// サムネール画像の横x縦サイズの分解
    
$reg_thumbsize explode("x",$thumb_size);
    
//縦横のサイズでどちらが利用されるかの判断
    
$ratio_x $reg_thumbsize[0] / $width;
    
$ratio_y $reg_thumbsize[1] / $height;
    
// 画像作成:縦横比の固定は縦横どちらかを0(null)にすると良い //
    
if($ratio_x $ratio_y){
        
// 横サイズで作成 //
        
$img_base->thumbnailImage($reg_thumbsize[0] , null);
    } else {
        
// 縦サイズで作成 //
        
$img_base->thumbnailImage(null,$reg_thumbsize[1]);
    }
    
//画像の出力:PHP5.3以降とPHP5.2の処理分岐
    
if(strnatcmp(phpversion(),'5.3')>=0){
        
//--PHP5.3以降は、 writeImageFileで対応--
        
$img_base->writeImageFile(fopen($outimg_path,'wb'));
    } else {
        
// --PHP5.2は、OK →PHP5.3以降 writeImage()のエラー
        
$img_base->writeImage($outimg_path);
    }
    
/* -----------------------------------#
     *  DBデータの編集とレコード挿入
     * --------------------------------- */
    // 作成したサムネール画像のサイズ取得
    
$wk_thumbsize getimagesize($outimg_path);
    
// 作成したサムネール画像のファイル容量
    
$wk_filesize filesize($outimg_path);
    
// 画像情報のセット:[横幅x縦長]/[拡張子]/[ファイル容量]
    
$inp_data['media_info'] = $wk_thumbsize[0].'x'.$wk_thumbsize[1].'/'.$ext_file.'/'.$wk_filesize;
    
// 画像データのセット(BLOB)
    
$wk_imgblob file_get_contents($outimg_path);
    if(
$wk_imgblob){
        
//画像をバイナリに変換
        
$inp_data['media_thumbimg'] = mysqli_real_escape_string($db,$wk_imgblob);
        
// フィールド名とVALUES値のquateとコンマ区切り処理
        
$wk_values '';
        
$wk_items  '';
        foreach(
$inp_data as $key => $value){
            if(
$wk_values){
                
$wk_values .= ',';
                
$wk_items  .= ',';
            }
            
$wk_values .= "'".$value."'";
            
$wk_items  .= $key;
        }
        
// sql文作成
        
$sql "INSERT into ".$db_def['DBtblm']." (".$wk_items.") VALUES(".$wk_values.")";
        
// レコード挿入
        
if(!mysqli_query($db,$sql) ){
            
$error_msg "■DBエラー:【 SQL 】:".$sql;
        }
    } else {
        
$error_msg "■エラー:画像データのセット(BLOB)";
    }
    
// 作成した一時画像の削除
    
unlink ($outimg_path);
}

/* ---------------------------------------#
 *         ファイル拡張子のget
 * -------------------------------------- */
function ext_fileget($str){
    
$str basename($str);
    
preg_match("/\.(.+?)$/",$str,$result);
    if(isset(
$result[1])){return strtolower($result[1]);}
}
?>