论坛风格切换
  • 5091阅读
  • 0回复

[常用修复工具]置顶帖修复工具 [复制链接]

上一主题 下一主题
离线太史慈
 

发帖
766
金币
626
威望
556
只看楼主 正序阅读 使用道具 楼主  发表于: 2011-05-04
置顶的原理是pw_threads表里面有topped字段,里面会纪录1,2,3
从pw_threads取出这些topped不为空的数据,插入到pw_posttopped表中,这就是置顶表
然后后台缓存管理里面更新置顶的缓存,会把pw_posttopped表的数据,写入到pw_forumdata表中,这样前台读数据时就会读缓存。

如果置顶有问题的站点,请执行下面这个程序,他会从pw_threads取出这些topped不为空的数据,插入到pw_posttopped表中(这项操作是后台没有的)

保存成repair_top.php,放在根目录下浏览器执行就可以了。
  1. <?php
  2. /**
  3. *
  4. * phpwind75 补丁修复程序 2009/12/08
  5. *
  6. */
  7. error_reporting(0);
  8. define('P_W',1);
  9. define('PW_UPLOAD',1);
  10. define('R_P',getdirname(__FILE__));
  11. define('D_P',R_P);
  12. require_once(R_P.'require/common.php');
  13. //require_once(R_P.'lang/up_function.php');
  14. include_once(D_P.'data/bbscache/config.php');
  15. require_once(R_P.'admin/cache.php');
  16. $basename = 'http://'.$_SERVER['HTTP_HOST'].(isset($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME']);
  17. @header("Content-Type:text/html; charset=$db_charset");
  18. include_once(D_P.'data/sql_config.php');
  19. //if ($database=='mysqli' && Pwloaddl('mysqli')===false) {
  20.     $database = 'mysql';
  21. require_once Pcv(R_P."require/db_$database.php");
  22. $db = new DB($dbhost,$dbuser,$dbpw,$dbname,$PW,$charset,$pconnect);
  23. $action = $_GET['action'];
  24. if (empty($action)) {
  25.     echo '<a href="repair_top.php?action=articletopped2">开始运行置顶修复工具 PHPWind v7.5SP3 (20091216)</a>';exit;
  26. } elseif ($action == 'articletopped2') {
  27.     if(!$_GET['step']){
  28.         $db->update("UPDATE pw_forums SET f_type='forum' WHERE type='category'");
  29.         $db->query("ALTER TABLE `pw_forumdata` CHANGE `topthreads` `topthreads` VARCHAR( 500 ) NOT NULL");
  30.         $db->query("ALTER TABLE `pw_poststopped` CHANGE `fid` `fid` MEDIUMINT( 5 ) NOT NULL");
  31.         $db->query("truncate table `pw_poststopped`");
  32.     }
  33.     require (R_P.'require/updateforum.php');
  34.     $per = 300;
  35.     $step = $_GET['step'];
  36.     !$step && $step = 1;
  37.     $start = ($step - 1) * $per;
  38.     $end = $start + $per - 1;
  39.     $limit = "LIMIT $start,$end";
  40.     $flag = false;
  41.     $query = $db->query("SELECT tid,fid,toolfield,topped FROM pw_threads WHERE topped != 0 AND fid != 0 ORDER BY tid $limit");
  42.     while ($rt = $db->fetch_array($query)) {
  43.         $flag = true;
  44.         $times++;
  45.         list($t,$e) = explode(',',$rt['toolfield']);
  46.         if($rt['topped']==3){
  47.             $db->update("UPDATE pw_threads set specialsort=103 where tid=".$rt['tid']);
  48.         }elseif($rt['topped']==2){
  49.             $db->update("UPDATE pw_threads set specialsort=102 where tid=".$rt['tid']);
  50.         }elseif($rt['topped']==1){
  51.             $db->update("UPDATE pw_threads set specialsort=101 where tid=".$rt['tid']);
  52.         }
  53.         setForumsTopped($rt['tid'],$rt['fid'],$rt['topped'],$t);
  54.     }
  55.     if ($flag == true) {
  56.         $step += 1;
  57.         echo "<meta http-equiv='refresh' content='0;url=$basename?action=articletopped2&step=$step'>";
  58.     }else{
  59.         updatetop();
  60.         echo '修复置顶结束,看看置顶有没出来';exit;
  61.     }
  62. }
  63. echo '升级中,请稍候...';exit;
  64. function getdirname($path=null){
  65.     if (!empty($path)) {
  66.         if (strpos($path,'\\')!==false) {
  67.             return substr($path,0,strrpos($path,'\\')).'/';
  68.         } elseif (strpos($path,'/')!==false) {
  69.             return substr($path,0,strrpos($path,'/')).'/';
  70.         }
  71.     }
  72.     return './';
  73. }
  74. function createtable($array){
  75.     global $db,$charset;
  76.     foreach ($array as $key => $value) {
  77.         !$value[1] && $value[1] = 'MyISAM';
  78.         $value[0] = "CREATE TABLE IF NOT EXISTS $key ($value[0]) ";
  79.         if ($db->server_info() > '4.1') {
  80.             $value[0] .= "ENGINE=$value[1]".($charset ? " DEFAULT CHARSET=$charset" : '');
  81.         } else {
  82.             $value[0] .= "TYPE=$value[1]";
  83.         }
  84.         $db->query($value[0]);
  85.     }
  86. }
  87. ?>


使用方法:
repair_top.zip (2 K) 下载次数:57
附件下载后,解压,上传到论坛的根目录,到浏览器页面上执行:http://您的论坛域名/repair_top.php(可以不用关闭论坛,反正执行下很快就好了。)
[url=http://www.phpwind.com]phpwind[/url]
快速回复
限100 字节
批量上传需要先选择文件,再选择上传
 
提到某人:
选择好友
上一个 下一个