ここの情報は古いです。ご理解頂いた上でお取り扱いください。

source: OpenPNE/branches/stable-2.14.x/setup/script/update/update01-for2.13.8-insert_image_size.php @ 12606

Last change on this file since 12606 was 12606, checked in by shingo, 11 years ago

#4175:コーディング規約にあわせた

File size: 5.5 KB
Line 
1<?php
2require_once './config.inc.php';
3chdir(OPENPNE_PUBLIC_HTML_DIR);
4require_once OPENPNE_WEBAPP_DIR . '/init.inc';
5
6/**
7 * 登録済み画像のファイルサイズを求める
8 */
9function get_image_size($category, $params, $handle)
10{
11    // request
12    $table       = $params[0];
13    $filename    = $params[1];
14    $c_member_id = $params[2];
15
16    // c_image 参照先
17    $image_dsn = array('main', 'image');
18    foreach ($image_dsn as $key => $dsn) {
19        if (!isset($GLOBALS['_OPENPNE_DSN_LIST'][$dsn])) {
20            continue;
21        }
22        $imagedb =& db_get_instance($dsn);
23
24        // 取り出し
25        $sql  = 'SELECT ';
26        if ($table <> 'biz_shisetsu') {
27            $sql .= $c_member_id . ' as c_member_id, ';
28        }
29        $sql .= $filename . ' as image_filename ';
30        if ($table == 'c_member') {
31            $sql .= ',r_date ';
32        } elseif ($table <> 'biz_group' && $table <> 'biz_shisetsu') {
33            $sql .= ',r_datetime ';
34        }
35        $sql .= 'FROM ' . $table;
36        $sql .= ' WHERE ' . $filename . ' <> ""';
37        $sql .= ' AND ' . $filename . ' is not NULL';
38        $data_list = db_get_all($sql);
39
40        $lines = 0;
41        if ($data_list) {
42            fwrite($handle, 'INSERT INTO c_image_size VALUES');
43        }
44        foreach($data_list as $data) {
45            // get image size
46            $sql  = 'SELECT bin FROM c_image WHERE filename = ?';
47            $params = array($data['image_filename']);
48            $c_image_list = $imagedb->get_all($sql, $params);
49
50            foreach ($c_image_list as $c_image) {
51                $filesize = strlen(base64_decode($c_image['bin']));
52            }
53
54            $ins_data = '';
55            if ($lines) {
56                $ins_data .= ',';
57            }
58            $ins_data .= '(';
59            if ($GLOBALS['_OPENPNE_DSN_LIST']['main']['dsn']['phptype'] == 'pgsql') {
60                $ins_data .= " nextval('c_image_size_c_image_size_id_seq')";
61            } else {
62                $ins_data .= ' null';
63            }
64            $ins_data .= ",'" . $data['image_filename'] . "'";
65            $ins_data .= ",'" . $data['c_member_id'] . "'";
66            $ins_data .= ",'" . $filesize . "'";
67            $ins_data .= ",'" . $category . "'";
68            if ($table == 'biz_group' || $table == 'biz_shisetsu') {
69                $ins_data .= ",'" . db_now() . "'";
70            } elseif ($table == 'c_member') {
71                $ins_data .= ",'" . $data['r_date'] . "'";
72            } else {
73                $ins_data .= ",'" . $data['r_datetime'] . "'";
74            }
75            $ins_data .= ')';
76            fwrite($handle, $ins_data);
77            $lines ++;
78        }
79        if ($lines) {
80            fwrite($handle, ";\n");
81        }
82    }
83   
84}
85
86/**
87 * テンポラリファイルを作成
88 */
89function open_temp_file($mode, $filename = '')
90{
91    if (!$filename) {
92        $w_filename = tempnam(OPENPNE_VAR_DIR . '/tmp', 'image_size');
93    } else {
94        $w_filename = $filename;
95    }
96    $handle = fopen($w_filename, $mode);
97
98    return array($w_filename, $handle);
99}
100
101/**
102 * load data infile
103 */
104function load_data_infile($filename)
105{
106    list($r_filename, $r_handle) = open_temp_file('r', $filename);
107    while (!feof($r_handle)) {
108        $sql = fgets($r_handle);
109        if ($sql) db_query($sql);
110    }
111    close_temp_file($filename, $r_handle);
112}
113
114/**
115 * テンポラリを閉じる
116 */
117function close_temp_file($filename, $handle)
118{
119    fclose($handle);
120    chmod($filename, 0666);
121}
122
123
124/**
125 * 処理本体
126 * biz_shisetsuは、member_idを持っていないため、設定不可
127 * array([category] => array([table],[filename field],[c_member_id field])
128 */
129$category_list = array(
130    'album' => array(
131        array('c_album_image', 'image_filename', 'c_member_id')
132    ),
133    'commu' => array(
134        array('c_commu_topic_comment', 'image_filename1', 'c_member_id'),
135        array('c_commu_topic_comment', 'image_filename2', 'c_member_id'),
136        array('c_commu_topic_comment', 'image_filename3', 'c_member_id'),
137    ),
138    'diary' => array(
139        array('c_diary', 'image_filename_1', 'c_member_id'),
140        array('c_diary', 'image_filename_2', 'c_member_id'),
141        array('c_diary', 'image_filename_3', 'c_member_id'),
142        array('c_diary_comment', 'image_filename_1', 'c_member_id'),
143        array('c_diary_comment', 'image_filename_2', 'c_member_id'),
144        array('c_diary_comment', 'image_filename_3', 'c_member_id'),
145        array('c_album', 'album_cover_image', 'c_member_id'),
146    ),
147     'other' => array(
148        array('c_commu', 'image_filename', 'c_member_id_admin'),
149        array('biz_group', 'image_filename', 'admin_id'),
150        array('biz_shisetsu', 'image_filename', 'c_member_id'),
151        array('c_member', 'image_filename_1', 'c_member_id'),
152        array('c_member', 'image_filename_2', 'c_member_id'),
153        array('c_member', 'image_filename_3', 'c_member_id'),
154        array('c_message', 'image_filename_1', 'c_member_id_from'),
155        array('c_message', 'image_filename_2', 'c_member_id_from'),
156        array('c_message', 'image_filename_3', 'c_member_id_from'),
157    ),
158);
159
160// Insert格納用テンポラリファイル作成
161list($filename, $handle) = open_temp_file('w');
162
163//テーブル分ループ
164foreach ($category_list as $category => $table_list) {
165
166    // サイズ取り出し
167    // 1テーブルづつInsert文を作成していく
168    foreach ($table_list as $target) {
169        get_image_size($category, $target, $handle);
170    }
171
172}
173// テンポラリファイルクローズ
174close_temp_file($filename, $handle);
175
176// Insert実行
177load_data_infile($filename);
178
179echo 'Complete!';
180?>
181
182
Note: See TracBrowser for help on using the repository browser.