cache.fun.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616
  1. <?php
  2. function updatecaches()
  3. {
  4. @set_time_limit(0);
  5. global $db;
  6. global $db_mymps;
  7. global $mymps_global;
  8. clear_cache_files();
  9. write_admin_cache();
  10. updateadvertisement();
  11. write_cron_cache();
  12. write_checkanswer_cache();
  13. update_checkanswer_settings();
  14. update_jswizard_settings();
  15. write_jswizard_cache();
  16. write_authcode_cache();
  17. write_plugin_cache();
  18. write_insidelink_cache();
  19. write_qqlogin_cache();
  20. write_wxlogin_cache();
  21. }
  22. function write_cats_js()
  23. {
  24. global $db;
  25. global $db_mymps;
  26. global $mymps_global;
  27. if (is_array($global_cat = get_categories_tree(0, 'category'))) {
  28. foreach ($global_cat as $k => $mymps) {
  29. $mayicms .= '<li><em><a href="' . $mymps[uri] . '" style="color:' . $mymps[color] . '">' . $mymps[catname] . '</a></em><dl><dt><b></b></dt><dd>';
  30. if (is_array($mymps)) {
  31. foreach ($mymps[children] as $w) {
  32. $mayicms .= '<a href="' . $w[uri] . '" style="color:' . $w[color] . '" title="' . $w[catname] . '">' . $w[catname] . '</a>';
  33. }
  34. }
  35. $mayicms .= '</dd></dl></li>';
  36. }
  37. $mayicms = html2js($mayicms);
  38. if (!createfile(MYMPS_DATA . '/caches/cats_js.php', $mayicms)) {
  39. write_msg(MYMPS_DATA . '/caches/cats_js.php 文件不可写,请检查相应权限');
  40. }
  41. }
  42. }
  43. function write_plugin_cache()
  44. {
  45. global $db;
  46. global $db_mymps;
  47. global $charset;
  48. clear_cache_files('plugin');
  49. $query = $db->query('SELECT * FROM `' . $db_mymps . 'plugin`');
  50. while ($row = $db->fetchRow($query)) {
  51. $res[$row['flag']]['id'] = $row['id'];
  52. $res[$row['flag']]['flag'] = $row['flag'];
  53. $res[$row['flag']]['iscore'] = $row['iscore'];
  54. $res[$row['flag']]['name'] = $row['name'];
  55. $res[$row['flag']]['directory'] = $row['directory'];
  56. $res[$row['flag']]['disable'] = $row['disable'];
  57. $config = $charset == 'utf-8' ? utf8_unserialize($row['config']) : unserialize($row['config']);
  58. $res[$row['flag']]['ifrewrite'] = $config['ifrewrite'];
  59. $res[$row['flag']]['seotitle'] = $config['seotitle'];
  60. $res[$row['flag']]['seokeywords'] = $config['seokeywords'];
  61. $res[$row['flag']]['seodescription'] = $config['seodescription'];
  62. $res[$row['flag']]['adminmenu'] = $config['adminmenu'];
  63. $res[$row['flag']]['membermenu'] = $config['membermenu'];
  64. if ($row['flag'] == 'goods') {
  65. $res[$row['flag']]['quhuo'] = $config['quhuo'];
  66. $res[$row['flag']]['fukuan'] = $config['fukuan'];
  67. $res[$row['flag']]['service'] = $config['service'];
  68. }
  69. $res[$row['flag']]['version'] = $row['version'];
  70. $res[$row['flag']]['releasetime'] = $row['releasetime'];
  71. $res[$row['flag']]['author'] = $row['author'];
  72. $res[$row['flag']]['introduce'] = $row['introduce'];
  73. $res[$row['flag']]['siteurl'] = $row['siteurl'];
  74. $res[$row['flag']]['email'] = $row['email'];
  75. $res[$row['flag']]['copyright'] = $row['copyright'];
  76. }
  77. write_static_cache('plugin', $res);
  78. clear_cache_files('pluginmenu_admin');
  79. clear_cache_files('pluginmenu_member');
  80. @include MYMPS_DATA . '/caches/plugin.php';
  81. if (is_array($data)) {
  82. foreach ($data as $key => $val) {
  83. if ($val['disable'] != 1) {
  84. $adminmenu[$val['name']] = arraychange($val['adminmenu']);
  85. $membermenu[$val['flag']] = $val['name'];
  86. write_static_cache('pluginmenu_admin', $adminmenu);
  87. write_static_cache('pluginmenu_member', $membermenu);
  88. }
  89. }
  90. }
  91. }
  92. function get_mobile_settings()
  93. {
  94. global $db;
  95. global $db_mymps;
  96. $data = read_static_cache('mobile');
  97. if ($data === false) {
  98. clear_cache_files('mobile');
  99. $res = $db->getOne('SELECT value FROM `' . $db_mymps . 'config` WHERE type=\'mobile\' AND description = \'mobile\'');
  100. $res = $res ? ($charset == 'utf-8' ? utf8_unserialize($res) : unserialize($res)) : array();
  101. write_static_cache('mobile', $res);
  102. }
  103. else {
  104. $res = $data;
  105. }
  106. return $res;
  107. }
  108. function get_commentsettings()
  109. {
  110. global $db;
  111. global $db_mymps;
  112. $data = read_static_cache('commentsettings');
  113. if ($data === false) {
  114. clear_cache_files('commentsettings');
  115. $res = $db->getOne('SELECT value FROM `' . $db_mymps . 'config` WHERE type=\'comment\' AND description = \'comment\'');
  116. $res = $res ? ($charset == 'utf-8' ? utf8_unserialize($res) : unserialize($res)) : array();
  117. write_static_cache('commentsettings', $res);
  118. }
  119. else {
  120. $res = $data;
  121. }
  122. return $res;
  123. }
  124. function get_info_counts()
  125. {
  126. global $db;
  127. global $db_mymps;
  128. $sql = 'SELECT catid,count(*) AS num FROM ' . $db_mymps . 'information group by catid';
  129. $counts = $db->getAll($sql);
  130. $res = array();
  131. foreach ($counts as $k => $v) {
  132. $res[$v['catid']] = $v['num'];
  133. }
  134. return $res;
  135. }
  136. function write_insidelink_cache()
  137. {
  138. global $db;
  139. global $db_mymps;
  140. global $charset;
  141. clear_cache_files('insidelink');
  142. $query = $db->query('SELECT * FROM `' . $db_mymps . 'insidelink`');
  143. while ($row = $db->fetchRow($query)) {
  144. $res['detail'][$row['word']] = $row['url'];
  145. }
  146. $settings = $db->getOne('SELECT value FROM `' . $db_mymps . 'config` WHERE type = \'insidelink\' AND description = \'insidelink\'');
  147. $res['settings'] = $charset == 'gbk' ? unserialize($settings) : utf8_unserialize($settings);
  148. write_static_cache('insidelink', $res);
  149. }
  150. function updateadvertisement()
  151. {
  152. global $timestamp;
  153. $query = $GLOBALS['db']->query('SELECT * FROM `' . $GLOBALS['db_mymps'] . 'advertisement` WHERE available>\'0\' AND starttime<=\'' . $timestamp . '\' AND type != \'normalad\' ORDER BY displayorder ASC');
  154. if ($GLOBALS['db']->num_rows($query)) {
  155. while ($adv = $GLOBALS['db']->fetchRow($query)) {
  156. foreach (explode(' ', $adv['targets']) as $target) {
  157. if ($adv['type'] == 'indexcatad' && is_numeric($target)) {
  158. $advs['index']['type'][$adv['type']][$target][] = $adv['advid'];
  159. $advs['index']['items'][$adv['advid']] = $adv['code'];
  160. }
  161. else if ($target == 'index') {
  162. $advs['index']['type'][$adv['type']][] = $adv['advid'];
  163. $advs['index']['items'][$adv['advid']] = $adv['code'];
  164. }
  165. else if ($target == 'all') {
  166. $position = $charset == 'gbk' ? unserialize($adv['parameters']) : utf8_unserialize($adv['parameters']);
  167. foreach (array('category', 'info', 'index', 'other') as $range) {
  168. if ($position['position']) {
  169. $advs[$range][$target]['type'][$adv['type']][$position['position']][] = $adv['advid'];
  170. }
  171. else {
  172. $advs[$range][$target]['type'][$adv['type']][] = $adv['advid'];
  173. }
  174. $advs[$range]['items'][$adv['advid']] = $adv['code'];
  175. }
  176. }
  177. else if (is_numeric($target)) {
  178. $position = $charset == 'gbk' ? unserialize($adv['parameters']) : utf8_unserialize($adv['parameters']);
  179. foreach (array('category', 'info') as $range) {
  180. if ($position['position']) {
  181. $advs[$range][$target]['type'][$adv['type']][$position['position']][] = $adv['advid'];
  182. }
  183. else {
  184. $advs[$range][$target]['type'][$adv['type']][] = $adv['advid'];
  185. }
  186. $advs[$range]['items'][$adv['advid']] = $adv['code'];
  187. }
  188. }
  189. }
  190. }
  191. foreach (array('index', 'category', 'info', 'other') as $range) {
  192. write_static_cache('adv_' . $range, $advs[$range]);
  193. }
  194. }
  195. }
  196. function write_cron_cache()
  197. {
  198. global $db;
  199. global $db_mymps;
  200. global $timestamp;
  201. $query = $db->query('SELECT * FROM `' . $db_mymps . 'crons` WHERE 1 OR nextrun = \'0\'');
  202. while ($row = $db->fetchRow($query)) {
  203. $res[$row['name']]['lastrun'] = $row['lastrun'];
  204. $res[$row['name']]['nextrun'] = $row['nextrun'];
  205. $res[$row['name']]['day'] = $row['day'];
  206. }
  207. $content = '<?php
  208. ';
  209. $content .= '$m_cron = ' . var_export($res, true) . ';
  210. ';
  211. $content .= '?>';
  212. if (!createfile(MYMPS_DATA . '/cron.cache.php', $content)) {
  213. write_msg(MYMPS_DATA . '/cron.cache.php 文件不可写,请检查相应权限');
  214. }
  215. }
  216. function write_qqlogin_cache()
  217. {
  218. global $db;
  219. global $db_mymps;
  220. global $timestamp;
  221. $query = $db->query('SELECT * FROM `' . $db_mymps . 'config` WHERE type = \'qqlogin\'');
  222. while ($row = $db->fetchRow($query)) {
  223. $res[$row['description']] = $row['value'];
  224. }
  225. $res['scope'] = 'get_user_info';
  226. write_static_cache('qqlogin', $res);
  227. }
  228. function write_wxlogin_cache()
  229. {
  230. global $db;
  231. global $db_mymps;
  232. global $timestamp;
  233. $query = $db->query('SELECT * FROM `' . $db_mymps . 'config` WHERE type = \'wxlogin\'');
  234. while ($row = $db->fetchRow($query)) {
  235. $res[$row['description']] = $row['value'];
  236. }
  237. $res['scope'] = 'get_user_info';
  238. write_static_cache('wxlogin', $res);
  239. }
  240. function write_authcode_cache()
  241. {
  242. global $db;
  243. global $db_mymps;
  244. clear_cache_files('authcodesettings');
  245. $query = $db->query('SELECT * FROM `' . $db_mymps . 'config` WHERE type = \'authcode\'');
  246. while ($row = $db->fetchRow($query)) {
  247. $res[$row['description']] = $row['value'];
  248. }
  249. write_static_cache('authcodesettings', $res);
  250. }
  251. function write_checkanswer_cache()
  252. {
  253. $query = $GLOBALS['db']->query('SELECT * FROM `' . $GLOBALS['db_mymps'] . 'checkanswer` ORDER BY id DESC');
  254. while ($row = $GLOBALS['db']->fetchRow($query)) {
  255. $res[$row['id']]['id'] = $row['id'];
  256. $res[$row['id']]['question'] = $row['question'];
  257. $res[$row['id']]['answer'] = $row['answer'];
  258. }
  259. write_static_cache('checkanswer', $res);
  260. }
  261. function update_checkanswer_settings()
  262. {
  263. global $db;
  264. global $db_mymps;
  265. clear_cache_files('checkanswer_settings');
  266. $query = $db->query('SELECT * FROM `' . $db_mymps . 'config` WHERE type = \'checkanswe\'');
  267. while ($row = $db->fetchRow($query)) {
  268. $res[$row['description']] = $row['value'];
  269. }
  270. write_static_cache('checkanswer_settings', $res);
  271. }
  272. function update_config_cache()
  273. {
  274. $query = $GLOBALS['db']->query('SELECT description,value FROM `' . $GLOBALS['db_mymps'] . 'config` WHERE type = \'config\'');
  275. while ($row = $GLOBALS['db']->fetchRow($query)) {
  276. $res[$row['description']] = $row['value'];
  277. }
  278. $content = '<?php
  279. ';
  280. $content .= '$mymps_global = ' . var_export($res, true) . ';
  281. ';
  282. $content .= '?>';
  283. if (!createfile(MYMPS_DATA . '/config.php', $content)) {
  284. write_msg(MYMPS_DATA . '/config.php 文件不可写,请检查相应权限!');
  285. }
  286. }
  287. function write_htmlstyle_cache($style = 'news')
  288. {
  289. global $db;
  290. global $db_mymps;
  291. $row = $db->getRow('SELECT value FROM `' . $db_mymps . 'config` WHERE description = \'glb_html_' . $style . '\'');
  292. $mymps .= '<?php
  293. ';
  294. $mymps .= '$htmlstyle[' . $style . '] = \'' . $row['value'] . '\';
  295. ';
  296. $mymps .= '?>';
  297. !createfile(MYMPS_DATA . '/html_style.inc.php', $mymps) && write_msg(MYMPS_DATA . '/html_style.inc.php 文件不可写,请检查相应权限');
  298. }
  299. function clear_tpl_files($is_cache = 1, $ext = '')
  300. {
  301. $dirs = array();
  302. if ($is_cache == 1) {
  303. $dirs[] = MYMPS_DATA . '/caches/';
  304. }
  305. else if ($is_cache == 2) {
  306. $dirs[] = MYMPS_DATA . '/pagesinfo/';
  307. }
  308. else if ($is_cache == 3) {
  309. $dirs[] = MYMPS_DATA . '/templates/';
  310. }
  311. else if ($is_cache == 4) {
  312. $dirs[] = MYMPS_DATA . '/pageslist/';
  313. }
  314. else if ($is_cache == 5) {
  315. $dirs[] = MYMPS_DATA . '/pagesmymps/';
  316. }
  317. $str_len = strlen($ext);
  318. $count = 0;
  319. foreach ($dirs as $dir) {
  320. $folder = @opendir($dir);
  321. if ($folder === false) {
  322. continue;
  323. }
  324. while ($file = readdir($folder)) {
  325. if ($file == '.' || $file == '..' || $file == 'index.htm' || $file == 'index.html') {
  326. continue;
  327. }
  328. if (is_file($dir . $file)) {
  329. $pos = strrpos($file, '.');
  330. if (0 < $str_len && $pos !== false) {
  331. $ext_str = substr($file, 0, $pos);
  332. if ($ext_str == $ext) {
  333. if (@unlink($dir . $file)) {
  334. $count++;
  335. }
  336. }
  337. }
  338. else if (@unlink($dir . $file)) {
  339. $count++;
  340. }
  341. }
  342. }
  343. closedir($folder);
  344. }
  345. return $count;
  346. }
  347. function clear_smt_cache_files($ext = '')
  348. {
  349. return clear_tpl_files(2, $ext);
  350. }
  351. function clear_compiled_files($ext = '')
  352. {
  353. return clear_tpl_files(3, $ext);
  354. }
  355. function clear_cache_files($ext = '')
  356. {
  357. return clear_tpl_files(1, $ext);
  358. }
  359. function clear_all_files($ext = '')
  360. {
  361. return clear_tpl_files(1, $ext) + clear_tpl_files(2, $ext) + clear_tpl_files(3, $ext);
  362. }
  363. function clear_smarty_files()
  364. {
  365. clear_tpl_files(2, $ext) + clear_tpl_files(3, $ext);
  366. }
  367. function read_static_cache($cache_name)
  368. {
  369. if ((DEBUG_MODE & 2) == 2) {
  370. return false;
  371. }
  372. static $result = array();
  373. if (!empty($result[$cache_name])) {
  374. return $result[$cache_name];
  375. }
  376. $cache_file_path = MYMPS_DATA . '/caches/' . $cache_name . '.php';
  377. if (file_exists($cache_file_path)) {
  378. include_once $cache_file_path;
  379. $result[$cache_name] = $data;
  380. return $result[$cache_name];
  381. }
  382. else {
  383. return false;
  384. }
  385. }
  386. function write_static_cache($cache_name, $caches)
  387. {
  388. if ((DEBUG_MODE & 2) == 2) {
  389. return false;
  390. }
  391. $cache_file_path = MYMPS_DATA . '/caches/' . $cache_name . '.php';
  392. $content = '<?php
  393. ';
  394. $content .= '$data = ' . var_export($caches, true) . ';
  395. ';
  396. $content .= '?>';
  397. file_put_contents($cache_file_path, $content, LOCK_EX);
  398. }
  399. function get_cache_config()
  400. {
  401. $data = read_static_cache('cache');
  402. if ($data === false) {
  403. $query = $GLOBALS['db']->query('SELECT * FROM `' . $GLOBALS['db_mymps'] . 'cache`');
  404. while ($row = $GLOBALS['db']->fetchRow($query)) {
  405. $cache[$row['page']]['time'] = $row['time'];
  406. $cache[$row['page']]['open'] = $row['open'];
  407. }
  408. write_static_cache('cache', $cache);
  409. }
  410. else {
  411. $cache = $data;
  412. }
  413. return $cache;
  414. }
  415. function update_jswizard_settings()
  416. {
  417. global $db;
  418. global $db_mymps;
  419. clear_cache_files('jswizard_settings');
  420. $query = $db->query('SELECT * FROM `' . $db_mymps . 'config` WHERE type = \'jswizard\'');
  421. while ($row = $db->fetchRow($query)) {
  422. $res[$row['description']] = $row['value'];
  423. }
  424. write_static_cache('jswizard_settings', $res);
  425. }
  426. function write_jswizard_cache()
  427. {
  428. global $db;
  429. global $db_mymps;
  430. global $charset;
  431. clear_cache_files('jswizard_lists');
  432. $query = $db->query('SELECT * FROM `' . $db_mymps . 'jswizard`');
  433. while ($row = $db->fetchRow($query)) {
  434. $res[$row['flag']]['id'] = $row['id'];
  435. $res[$row['flag']]['flag'] = $row['flag'];
  436. $res[$row['flag']]['customtype'] = $row['customtype'];
  437. $res[$row['flag']]['parameter'] = $charset == 'utf-8' ? utf8_unserialize($row['parameter']) : unserialize($row['parameter']);
  438. }
  439. write_static_cache('jswizard_lists', $res);
  440. }
  441. function write_admin_cache()
  442. {
  443. clear_cache_files('admin');
  444. $query = $GLOBALS['db']->query('SELECT a.*,b.purviews,b.typename,b.ifsystem FROM `' . $GLOBALS['db_mymps'] . 'admin` AS a LEFT JOIN `' . $GLOBALS['db_mymps'] . 'admin_type` AS b ON a.typeid = b.id');
  445. while ($row = $GLOBALS['db']->fetchRow($query)) {
  446. $res[$row['userid']]['typename'] = $row['typename'];
  447. $res[$row['userid']]['ifsystem'] = $row['ifsystem'];
  448. $res[$row['userid']]['purviews'] = $row['purviews'];
  449. }
  450. $row = $query = NULL;
  451. write_static_cache('admin', $res);
  452. return $res;
  453. }
  454. function get_credit_score()
  455. {
  456. global $db;
  457. global $db_mymps;
  458. global $charset;
  459. $data = read_static_cache('credit_score');
  460. if ($data === false) {
  461. $query = $db->query('SELECT * FROM `' . $db_mymps . 'config` WHERE type = \'credit_sco\'');
  462. while ($row = $db->fetchRow($query)) {
  463. $res[$row['description']] = $charset == 'utf-8' ? utf8_unserialize($row['value']) : unserialize($row['value']);
  464. }
  465. write_static_cache('credit_score', $res);
  466. }
  467. else {
  468. $res = $data;
  469. }
  470. return $res;
  471. }
  472. function get_tpl_index()
  473. {
  474. global $db;
  475. global $db_mymps;
  476. global $charset;
  477. $data = read_static_cache('tpl_index');
  478. if ($data === false) {
  479. clear_cache_files('tpl_index');
  480. $query = $db->query('SELECT * FROM `' . $db_mymps . 'config` WHERE type = \'tpl\'');
  481. while ($row = $db->fetchRow($query)) {
  482. $res[$row['description']] = $charset == 'utf-8' ? utf8_unserialize($row['value']) : unserialize($row['value']);
  483. }
  484. write_static_cache('tpl_index', $res);
  485. }
  486. else {
  487. $res = $data;
  488. }
  489. return $res;
  490. }
  491. function get_category_dir()
  492. {
  493. $data = read_static_cache('category_dir');
  494. if ($data === false) {
  495. $query = $GLOBALS['db']->query('SELECT catid,dir_typename FROM `' . $GLOBALS['db_mymps'] . 'category`');
  496. while ($row = $GLOBALS['db']->fetchRow($query)) {
  497. $cache[$row['catid']] = $row['dir_typename'];
  498. }
  499. write_static_cache('category_dir', $cache);
  500. }
  501. else {
  502. $cache = $data;
  503. }
  504. return $cache;
  505. }
  506. ?>