效果
- 快速读取数据
- 定时刷新数据
- 即时替换数据
示例1(phpcms框架)
定时 查询参与答题总人数
content.class.php
//获取活动每期参与答题人数
function get_personnum_by_time($tb1, $tb2){
$filename = PHP_ROOT."/uploadfile/json/personnum.json";
/* //生成文件
$aPersonNumInfo = $this->get_answer_question_person_num($tb1, $tb2); $fp = fopen($filename, "w");
fwrite($fp, json_encode(array('expire_time'=>time() + 3600*24,'data'=>$aPersonNumInfo)));
fclose($fp);die; */
//获取文件数据
$data = json_decode(file_get_contents($filename));
//如果过期
if($data && $data->expire_time < time()){
//获取数据
$aPersonNumInfo = $this->get_answer_question_person_num($tb1, $tb2);
//创建并写入文件
$data->expire_time = time() + 3600*24;
$data->data = $aPersonNumInfo;
if (!file_exists($filename)) {
mkdirs($filename, 0777, true);
}
$fp = fopen($filename, "w");
fwrite($fp, json_encode($data));
fclose($fp);
}else{
$aPersonNumInfo = $data->data;
}
return $aPersonNumInfo;
}
function get_answer_question_person_num($tb1, $tb2){
if($tb1 == NULL){
return false;
}
if($tb2 == NULL){
return false;
}
$button = $this->questionstate($tb2);
if(!$button){
return false;
}
$person_num = array();
foreach($button as $k => $v){
if($v[title] == '201607'){
$sql = "SELECT * FROM `v_weixin_doctor_reply_img2016` WHERE `mainid` = '".$v[title]."' AND `file_url` IS NOT NULL";
}else{
$sql = "SELECT * FROM `$tb1` WHERE `mainid` = ".$v[id];
}
$result = $this->db->query($sql);
$person_num[$k] = $this->db->num_rows($result);
}
$this->db->free_result($result);
return $person_num;
}
personnum.json
{"expire_time":1469088900,"data":[3133,6722,6580,2546,6700,4563,5165,3134,3406]}
示例2(laravel框架)
private function getJsApiTicket() {
// jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例
$baseurl = dirname(dirname(dirname(self::$jsonUrl))).'/public/json/';
$file = $baseurl."jsapi_ticket.json";
if(file_exists($file)){
$data = json_decode(file_get_contents($file));
}
if (!isset($data)||$data->expire_time < time()) {
$accessToken = self::getAccessToken();
// 如果是企业号用以下 URL 获取 ticket
// $url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$accessToken";
$url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";
$res = json_decode(self::httpGet($url));
$ticket = $res->ticket;
if(!isset($data)){
$data = new stdClass();
}
if ($ticket) {
$data->expire_time = time() + 7000;
$data->jsapi_ticket = $ticket;
$fp = fopen($baseurl."jsapi_ticket.json", "w");
fwrite($fp, json_encode($data));
fclose($fp);
}
} else {
$ticket = $data->jsapi_ticket;
}
return $ticket;
}
public static function getAccessToken() {
// access_token 应该全局存储与更新,以下代码以写入到文件中做示例
$baseurl = dirname(dirname(dirname(self::$jsonUrl))).'/public/json/';
$file = $baseurl."access_token.json";
if(file_exists($file)){
$data = json_decode(file_get_contents($file));
}
if (!isset($data)||$data->expire_time < time()) {
// 如果是企业号用以下URL获取access_token
// $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=".APPID."&corpsecret=".APPSECRET;
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".APPID."&secret=".APPSECRET;
$res = json_decode(self::httpGet($url));
$access_token = $res->access_token;
if(!isset($data)){
$data = new stdClass();
}
if ($access_token) {
$data->expire_time = time() + 7000;
$data->access_token = $access_token;
$fp = fopen($baseurl."access_token.json", "w");
fwrite($fp, json_encode($data));
fclose($fp);
}
} else {
$access_token = $data->access_token;
}
return $access_token;
}
public static function httpGet($url,$data='') {
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_URL, $url);
if($data){
curl_setopt ( $curl, CURLOPT_POST, 1 );
curl_setopt ( $curl, CURLOPT_POSTFIELDS, $data );
}
$content = curl_exec($curl);
return $content;
}