Changeset 1647869
- Timestamp:
- 04/29/2017 06:20:14 AM (9 years ago)
- Location:
- step-by-step-social-count-cache/trunk
- Files:
-
- 2 edited
-
readme.txt (modified) (2 diffs)
-
sbs-social-count-cache.php (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
step-by-step-social-count-cache/trunk/readme.txt
r1416129 r1647869 4 4 Tags: cache, count, sns, social 5 5 Requires at least: 4.2.4 6 Tested up to: 4. 5.27 Stable tag: 1. 5.26 Tested up to: 4.7.4 7 Stable tag: 1.6 8 8 License: GPLv2 or later 9 9 License URI: http://www.gnu.org/licenses/gpl-2.0.html … … 109 109 == Changelog == 110 110 111 1.6 112 キャッシュ周りの調整。 113 デバッグモードの実装。 114 111 115 1.5.2 112 116 タグのカスタマイズ時に生成されるURLをエンティティ化。FacebookのAccess Tokenが誤っている場合、エラーメッセージを表示するように変更。 -
step-by-step-social-count-cache/trunk/sbs-social-count-cache.php
r1416129 r1647869 4 4 Plugin URI: https://wordpress.org/plugins/step-by-step-social-count-cache/ 5 5 Description: ソーシャルブックマークのカウントをキャッシュするプラグイン 6 Version: 1. 5.26 Version: 1.6 7 7 Author: oxynotes 8 8 Author URI: http://oxynotes.com … … 576 576 $u_hour = ($hour * 60 * 60); 577 577 $u_minute = ($minute * 60); 578 return $current_time -( $u_day + $u_hour + $u_minute );578 return $current_time + ( $u_day + $u_hour + $u_minute ); 579 579 } 580 580 … … 700 700 */ 701 701 public function get_pocket( $url ) { 702 $pocket_uri = 'http ://widgets.getpocket.com/v1/button?v=1&count=horizontal&url=' . rawurlencode($url);702 $pocket_uri = 'https://widgets.getpocket.com/v1/button?label=pocket&count=horizontal&v=1&url=' . rawurlencode($url) . '&src=' . rawurlencode($url); 703 703 $result = wp_remote_get( $pocket_uri, array( 'timeout' => 5 ) ); 704 704 … … 1005 1005 1006 1006 1007 1008 /** 1009 * テストモード時に各パーツから受け取ったコメントを書き出す処理をまとめたもの 1010 * 書き出されたコメントはコールバック関数に渡される 1011 * @param str 各コメントの要素を受け取る 1012 * @return str コールバック関数に渡すコメント 1013 * 1014 * since 1.5.3 テストモード用に追加 1015 */ 1016 function output_testmode_comment( $buffer ) { 1017 $url = get_permalink(); 1018 $site_title = get_bloginfo( 'name' ); 1019 1020 // html_entity_decode()を挟まないと"や'が文字参照で表示されてしまうので注意 1021 $title = urlencode( html_entity_decode( get_the_title(), ENT_COMPAT, 'UTF-8' ) ); 1022 1023 $search = array( '[[url]]', '[[site_title]]', '[[title]]', '[[count]]' ); 1024 $replace = array( $url, $site_title, $title, $count ); 1025 $rep_txt = str_replace( $search, $replace, $arg ); 1026 1027 return $rep_txt; 1028 } 1029 1030 1031 1032 1033 1007 1034 } // end class 1008 1035 … … 1014 1041 // インスタンスの作成(コンストラクタの実行) 1015 1042 $SBS_SocialCountCache = new SBS_SocialCountCache(); 1043 1044 1045 1046 /** 1047 * テスト用のコールバックをグローバル変数に追加する 1048 * 1049 * @param string $key 1050 * @param mixed $callback 1051 * @return void 1052 */ 1053 function add_callback( $key, $callback ) { 1054 $GLOBALS['_sbs_callbacks'][$key] = $callback; 1055 } 1016 1056 1017 1057 … … 1049 1089 $url = get_permalink( $postid ); 1050 1090 1051 /* 1052 // test用 1053 $postid = 105; 1054 $url = "http://oxynotes.com/?p=2933"; 1055 */ 1091 // デバッグモード 1092 $debug_mode = ture; 1093 1094 // デバッグモード用の配列作成 1095 $debug_Log = array(); 1096 1056 1097 1057 1098 … … 1063 1104 代わりにcurrent_timeやget_date_from_gmtの使用が推奨されている。 1064 1105 また投稿の最終更新日を取得するにはget_the_modified_timeを使う。 1065 1066 しかしこれらの関数には謎の仕様があり、なぜか+9時間される。1067 設定画面でUTC+9にしているが、プラグインで使うと更に+9される???1068 今回はデータベースの値と、現在の時間が両方+9時間されるので支障ないが、1069 厳密に時間を出さないといけない場合は注意が必要だ。1070 普通に書くと-9時間されたUTCが返ってくるならわかるが、本当に謎。1071 国際化のための使用なのかもしれないが、ありがた迷惑。わざわざソースまで追うのが面倒。1072 そしてCodexの当該タグのページにも解説なし。1073 1106 */ 1074 1107 … … 1078 1111 $week = $day - (6 * 24 * 60 * 60); // 1週間 1079 1112 1080 1081 1082 1083 1113 // 最終更新日が1日以内、1週間以内、それ以上の場合で振り分け、現時点での有効期限を算出 1084 1114 if ( $pfx_date > $day ) { // 最終更新日が1日以内の場合 1085 1115 $exp_time = $sbs->exp_time($current_time, $sbs_cache_time['1day']['day'], $sbs_cache_time['1day']['hour'], $sbs_cache_time['1day']['minute']); 1086 // var_dump("最終更新日が1日以内"); // テスト用 1116 $setting_cache_time = ($sbs_cache_time['1day']['day'] * 24 * 60 * 60) + ($sbs_cache_time['1day']['hour'] * 60 * 60) + ($sbs_cache_time['1day']['minute'] * 60); 1117 $debug_Log['投稿の最終更新日から'] = "1日以内"; 1087 1118 } elseif( $pfx_date > $week ) { // 1週間以内 1088 1119 $exp_time = $sbs->exp_time($current_time, $sbs_cache_time['1week']['day'], $sbs_cache_time['1week']['hour'], $sbs_cache_time['1week']['minute']); 1089 // var_dump("最終更新日が1週間以内"); // テスト用 1120 $setting_cache_time = ($sbs_cache_time['1week']['day'] * 24 * 60 * 60) + ($sbs_cache_time['1week']['hour'] * 60 * 60) + ($sbs_cache_time['1week']['minute'] * 60); 1121 $debug_Log['投稿の最終更新日から'] = "1日以上、1週間以内"; 1090 1122 } else { // それ以上 1091 1123 $exp_time = $sbs->exp_time($current_time, $sbs_cache_time['after']['day'], $sbs_cache_time['after']['hour'], $sbs_cache_time['after']['minute']); 1092 // var_dump("最終更新日が1週間以上"); // テスト用1093 }1094 1095 1096 1097 1098 // 対応する投稿IDのキャッシュをデータベースから取得する 1124 $setting_cache_time = ($sbs_cache_time['after']['day'] * 24 * 60 * 60) + ($sbs_cache_time['after']['hour'] * 60 * 60) + ($sbs_cache_time['after']['minute'] * 60); 1125 $debug_Log['投稿の最終更新日から'] = "1週間以上経過"; 1126 } 1127 1128 // クエリの組み立て 1129 $query = "SELECT day,twitter_count,facebook_count,google_count,hatena_count,pocket_count,feedly_count FROM {$table_name} WHERE postid = {$postid}"; 1130 1099 1131 // acpが有効な場合はapcにデータを保存して再利用する 1100 $query = "SELECT day,twitter_count,facebook_count,google_count,hatena_count,pocket_count,feedly_count FROM {$table_name} WHERE postid = {$postid}";1101 if ( function_exists( 'apc_store' ) && ini_get( 'apc.enabled' ) ) { // apcモジュール読み込まれており、更に有効かどうか調べる1132 if ( function_exists( 'apc_store' ) && ini_get( 'apc.enabled' ) ) { // apcモジュール読み込まれており、更に有効かどうか、キャッシュの有効期限が切れてないか調べる 1133 $debug_Log['サーバのapc cache'] = "有効"; 1102 1134 $sbs_apc_key = "sbs_db_cache_" . md5( __FILE__ ) . $postid; // md5で一意性確保 1103 // var_dump("apc有効"); 1135 1104 1136 if ( apc_fetch( $sbs_apc_key ) ) { // キャッシュがある場合 1137 1105 1138 $result = apc_fetch( $sbs_apc_key ); 1106 // var_dump("apcキャッシュ見つかった"); 1107 } else { // キャッシュがない場合(データベースのキャッシュを取得) 1139 $debug_Log['apc cache'] = "見つかった"; 1140 1141 // キャッシュの有効期限が切れている場合(古い設定のAPCキャッシュが残っていることがあるため) 1142 if ( 0 > strtotime($result->day)+$setting_cache_time-$current_time ) { 1143 $debug_Log['apc cacheの有効性'] = "古い設定のため新しいものに更新"; 1144 1145 $result = $wpdb->get_row( $query ); 1146 apc_store( $sbs_apc_key, $result, strtotime($result->day)+$setting_cache_time-$current_time ); // 面倒なので保存した後に2度目からAPCで表示するので注意(有効期限が整数になる必要があるため) 1147 } 1148 1149 } else { // キャッシュがない場合 1150 1108 1151 $result = $wpdb->get_row( $query ); 1109 apc_store( $sbs_apc_key, $result, strtotime($result->day) - $exp_time); // APCの有効期限は、キャッシュ作成日-有効期限で算出。期限切れの場合はマイナスになるがAPCでは問題ないようだ 1110 // var_dump("apcキャッシュ見つからない"); 1111 } 1112 } else { 1113 $result = $wpdb->get_row($query); 1114 // var_dump("apc無効"); 1115 } 1116 1117 1118 1119 1120 // var_dump("投稿の最終更新日時取得" . date("Y-m-d H:i:s",$pfx_date) . "<br>"); 1121 // var_dump("ブログのローカルタイム取得" . date("Y-m-d H:i:s",$current_time) . "<br>"); 1122 // var_dump("有効期限" . date("Y-m-d H:i:s",$exp_time) . "<br>"); 1123 // var_dump("キャッシュの取得時間" . date("Y-m-d H:i:s",strtotime($result->day)) . "<br>"); 1124 1125 // キャッシュの取得日時が有効期限内の場合 1126 if ( strtotime($result->day) > $exp_time ) { 1127 1128 // var_dump("キャッシュが有効期限内"); // テスト用 1152 apc_store( $sbs_apc_key, $result, strtotime($result->day)+$setting_cache_time-$current_time ); 1153 $debug_Log['apc cache'] = "見つからない"; 1154 1155 } 1156 1157 } else { // apcが無効な場合 1158 1159 $result = $wpdb->get_row( $query ); 1160 $debug_Log['サーバのapc cache'] = "無効"; 1161 1162 } 1163 1164 $debug_Log['サイトのローカルタイム'] = date("Y-m-d H:i:s",$current_time); 1165 $debug_Log['投稿の最終更新日時'] = date("Y-m-d H:i:s",$pfx_date); 1166 $debug_Log['キャッシュの取得時間'] = date("Y-m-d H:i:s",strtotime($result->day)); 1167 $debug_Log['キャッシュの有効期限'] = date("Y-m-d H:i:s",strtotime($result->day)+$setting_cache_time); 1168 $debug_Log['キャッシュの残り時間'] = strtotime($result->day)+$setting_cache_time-$current_time . "秒"; 1169 1170 // キャッシュの取得日時が有効期限内の場合(キャッシュの有効期限がある場合) 1171 if ( strtotime($result->day)+$setting_cache_time-$current_time > 0 ) { 1172 1173 $debug_Log['キャッシュ'] = "期限内"; 1174 1175 // デバックモード用の出力 1176 if ( $debug_mode ) { 1177 echo "<!--" . "\n"; 1178 echo "SBS Social Count Cacheデバックモード" . "\n"; 1179 foreach( $debug_Log as $key => $value ) { 1180 echo $key . ':' . $value . "\n"; 1181 } 1182 echo "-->"; 1183 } 1184 // キャッシュを利用して返す 1129 1185 return $sbs->get_cache( $result, $active_sns ); 1130 1186 1131 1187 } else { // 有効期限切れの場合 1132 1188 1133 // var_dump("キャッシュが有効期限切れ"); // テスト用 1189 $debug_Log['キャッシュ'] = "期限切れ"; 1190 1191 // デバックモード用の出力 1192 if ( $debug_mode ) { 1193 echo "<!--" . "\n"; 1194 echo "SBS Social Count Cacheデバックモード" . "\n"; 1195 foreach( $debug_Log as $key => $value ) { 1196 echo $key . ':' . $value . "\n"; 1197 } 1198 echo "-->"; 1199 } 1200 1134 1201 return $sbs->add_cache( $postid, $url, $active_sns ); 1135 1202 1136 1203 } 1204 1205 1206 1207 1137 1208 } 1138 1209
Note: See TracChangeset
for help on using the changeset viewer.