blogger
修訂 | 5e61ada1348469d980f7ae23061b29ca8803e55c (tree) |
---|---|
時間 | 2017-05-29 03:59:55 |
作者 | umorigu <umorigu@gmai...> |
Commiter | umorigu |
BugTrack/2422 Improve access count up logic to avoid miscounting
@@ -89,9 +89,12 @@ function plugin_counter_get_count($page) | ||
89 | 89 | $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); |
90 | 90 | $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); |
91 | 91 | $pdo->setAttribute(PDO::ATTR_TIMEOUT, 5); |
92 | - $stmt = $pdo->prepare('SELECT total, update_date, | |
93 | - today_viewcount, yesterday_viewcount, remote_addr | |
94 | - FROM page_counter WHERE page_name = ?'); | |
92 | + $stmt = $pdo->prepare( | |
93 | +'SELECT total, update_date, | |
94 | + today_viewcount, yesterday_viewcount, remote_addr | |
95 | + FROM page_counter | |
96 | + WHERE page_name = ?' | |
97 | + ); | |
95 | 98 | $stmt->execute(array($page)); |
96 | 99 | $r = $stmt->fetch(); |
97 | 100 | if ($r === false) { |
@@ -127,6 +130,7 @@ function plugin_counter_get_count($page) | ||
127 | 130 | |
128 | 131 | // Anothoer day? |
129 | 132 | $remote_addr = $_SERVER['REMOTE_ADDR']; |
133 | + $count_up = FALSE; | |
130 | 134 | if ($c['date'] != $default['date']) { |
131 | 135 | $modify = TRUE; |
132 | 136 | $is_yesterday = ($c['date'] == get_date('Y/m/d', UTIME - 24 * 60 * 60)); |
@@ -135,12 +139,14 @@ function plugin_counter_get_count($page) | ||
135 | 139 | $c['yesterday'] = $is_yesterday ? $c['today'] : 0; |
136 | 140 | $c['today'] = 1; |
137 | 141 | $c['total']++; |
142 | + $count_up = TRUE; | |
138 | 143 | } else if ($c['ip'] != $remote_addr) { |
139 | 144 | // Not the same host |
140 | 145 | $modify = TRUE; |
141 | 146 | $c['ip'] = $remote_addr; |
142 | 147 | $c['today']++; |
143 | 148 | $c['total']++; |
149 | + $count_up = TRUE; | |
144 | 150 | } |
145 | 151 | |
146 | 152 | if (PLUGIN_COUNTER_USE_DB) { |
@@ -148,24 +154,27 @@ function plugin_counter_get_count($page) | ||
148 | 154 | try { |
149 | 155 | if ($is_new_page) { |
150 | 156 | // Insert |
151 | - $add_stmt = $pdo->prepare('INSERT INTO page_counter | |
152 | - (page_name, total, update_date, today_viewcount, | |
153 | - yesterday_viewcount, remote_addr) | |
154 | - values (?, ?, ?, ?, ?, ?)'); | |
157 | + $add_stmt = $pdo->prepare( | |
158 | +'INSERT INTO page_counter | |
159 | + (page_name, total, update_date, today_viewcount, | |
160 | + yesterday_viewcount, remote_addr) | |
161 | + VALUES (?, ?, ?, ?, ?, ?)' | |
162 | + ); | |
155 | 163 | $r_add = $add_stmt->execute(array($page, $c['total'], |
156 | 164 | $c['date'], $c['today'], $c['yesterday'], $c['ip'])); |
157 | - } else { | |
158 | - // Update | |
159 | - $upd_stmt = $pdo->prepare('UPDATE page_counter | |
160 | - SET total = ?, | |
161 | - update_date = ?, | |
162 | - today_viewcount = ?, | |
163 | - yesterday_viewcount = ?, | |
164 | - remote_addr = ? | |
165 | - WHERE page_name = ?'); | |
166 | - $r_upd = $upd_stmt->execute(array($c['total'], | |
167 | - $c['date'], $c['today'], $c['yesterday'], $c['ip'], | |
168 | - $page)); | |
165 | + } else if ($count_up) { | |
166 | + // Update on counting up 'total' | |
167 | + $upd_stmt = $pdo->prepare( | |
168 | +'UPDATE page_counter | |
169 | + SET total = total + 1, | |
170 | + update_date = ?, | |
171 | + today_viewcount = ?, | |
172 | + yesterday_viewcount = ?, | |
173 | + remote_addr = ? | |
174 | + WHERE page_name = ?' | |
175 | + ); | |
176 | + $r_upd = $upd_stmt->execute(array($c['date'], | |
177 | + $c['today'], $c['yesterday'], $c['ip'], $page)); | |
169 | 178 | } |
170 | 179 | } catch (PDOException $e) { |
171 | 180 | foreach (array_keys($c) as $key) { |
@@ -197,13 +206,15 @@ function plugin_counter_tool_setup_table() { | ||
197 | 206 | PLUGIN_COUNTER_DB_OPTIONS); |
198 | 207 | $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); |
199 | 208 | $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); |
200 | - $r = $pdo->exec('CREATE TABLE page_counter ( | |
201 | - page_name VARCHAR(300) PRIMARY KEY, | |
202 | - total INTEGER NOT NULL, | |
203 | - update_date VARCHAR(20) NOT NULL, | |
204 | - today_viewcount INTEGER NOT NULL, | |
205 | - yesterday_viewcount INTEGER NOT NULL, | |
206 | - remote_addr VARCHAR(100) | |
207 | - )'); | |
209 | + $r = $pdo->exec( | |
210 | +'CREATE TABLE page_counter ( | |
211 | + page_name VARCHAR(300) PRIMARY KEY, | |
212 | + total INTEGER NOT NULL, | |
213 | + update_date VARCHAR(20) NOT NULL, | |
214 | + today_viewcount INTEGER NOT NULL, | |
215 | + yesterday_viewcount INTEGER NOT NULL, | |
216 | + remote_addr VARCHAR(100) | |
217 | + )' | |
218 | + ); | |
208 | 219 | echo "OK\n"; |
209 | 220 | } |