·Home 2019 登陆记录 最新更新 资料库SEO官方淘宝店
查看: 19|回复: 0

[utf8mb4 InnoDB] Discuz!X3.4升X3.5发帖回帖遇到(1062) Duplicate entry 'xx-0' for key 'PRIMARY'

[复制链接]

771

主题

1547

能量

5

贡献币

无敌战神

Rank: 9Rank: 9Rank: 9

发表于 2020-5-5 17:38:07 | 显示全部楼层 |阅读模式
Discuz!X3.4升X3.5发帖回帖遇到(1062) Duplicate entry 'xx-0' for key 'PRIMARY'解决办法:

问题原因,系DZ论坛转 InnoDB 数据库引擎的时候扩展文件被最新dz程序覆盖造成:

路径:
/source/class/class_core.php
内容修改为:
  1. <?php

  2. /*

  3. *      $Id: 2013/9/25 10:21:30 class_core.php Luca Shin $

  4. */





  5. error_reporting(E_ALL);



  6. define('IN_DISCUZ', true);

  7. define('DISCUZ_ROOT', substr(dirname(__FILE__), 0, -12));

  8. define('DISCUZ_CORE_DEBUG', false);

  9. define('DISCUZ_TABLE_EXTENDABLE', false);



  10. set_exception_handler(array('C', 'handleException'));



  11. if(DISCUZ_CORE_DEBUG) {

  12.         set_error_handler(array('C', 'handleError'));

  13.         register_shutdown_function(array('C', 'handleShutdown'));

  14. }



  15. if(function_exists('spl_autoload_register')) {

  16.         spl_autoload_register(array('C', 'autoload'));

  17. } else {

  18.         function __autoload($class) {

  19.                 return C::autoload($class);

  20.         }

  21. }



  22. define('EXTEND', true);

  23. define('EXTEND_NO_CACHE', false);

  24. define('EXTEND_NO_DETECT', false);

  25. C::setconstant();

  26. C::creatapp();



  27. class core

  28. {

  29.         private static $_tables;

  30.         private static $_imports;

  31.         private static $_app;

  32.         private static $_memory;



  33.         public static function app() {

  34.                 return self::$_app;

  35.         }



  36.         public static function creatapp() {

  37.                 if(!is_object(self::$_app)) {

  38.                         self::$_app = discuz_application::instance();

  39.                 }

  40.                 return self::$_app;

  41.         }



  42.         public static function t($name) {

  43.                 return self::_make_obj($name, 'table', DISCUZ_TABLE_EXTENDABLE);

  44.         }



  45.         public static function m($name) {

  46.                 $args = array();

  47.                 if(func_num_args() > 1) {

  48.                         $args = func_get_args();

  49.                         unset($args[0]);

  50.                 }

  51.                 return self::_make_obj($name, 'model', true, $args);

  52.         }



  53.         protected static function _make_obj($name, $type, $extendable = false, $p = array()) {

  54.                 $pluginid = null;

  55.                 if($name[0] === '#') {

  56.                         list(, $pluginid, $name) = explode('#', $name);

  57.                 }

  58.                 $cname = $type.'_'.$name;

  59.                 if(!isset(self::$_tables[$cname])) {

  60.                         if(!class_exists($cname, false)) {

  61.                                 self::import(($pluginid ? 'plugin/'.$pluginid : 'class').'/'.$type.'/'.$name);

  62.                         }

  63.                         if($extendable) {

  64.                                 self::$_tables[$cname] = new discuz_container();

  65.                                 switch (count($p)) {

  66.                                         case 0:        self::$_tables[$cname]->obj = new $cname();break;

  67.                                         case 1:        self::$_tables[$cname]->obj = new $cname($p[1]);break;

  68.                                         case 2:        self::$_tables[$cname]->obj = new $cname($p[1], $p[2]);break;

  69.                                         case 3:        self::$_tables[$cname]->obj = new $cname($p[1], $p[2], $p[3]);break;

  70.                                         case 4:        self::$_tables[$cname]->obj = new $cname($p[1], $p[2], $p[3], $p[4]);break;

  71.                                         case 5:        self::$_tables[$cname]->obj = new $cname($p[1], $p[2], $p[3], $p[4], $p[5]);break;

  72.                                         default: $ref = new ReflectionClass($cname);self::$_tables[$cname]->obj = $ref->newInstanceArgs($p);unset($ref);break;

  73.                                 }

  74.                         } else {

  75.                                 self::$_tables[$cname] = new $cname();

  76.                         }

  77.                 }

  78.                 return self::$_tables[$cname];

  79.         }



  80.         public static function memory() {

  81.                 if(!self::$_memory) {

  82.                         self::$_memory = new discuz_memory();

  83.                         self::$_memory->init(self::app()->config['memory']);

  84.                 }

  85.                 return self::$_memory;

  86.         }



  87.         public static function import($name, $folder = '', $force = true) {

  88.                 $key = $folder.$name;

  89.                 if(!isset(self::$_imports[$key])) {

  90.                         $path = DISCUZ_ROOT.'/source/'.$folder;

  91.                         if(strpos($name, '/') !== false) {

  92.                                 $pre = basename(dirname($name));

  93.                                 $filename = dirname($name).'/'.$pre.'_'.basename($name).'.php';

  94.                         } else {

  95.                                 $filename = $name.'.php';

  96.                         }



  97.                         if(is_file($path.'/'.$filename)) {

  98.                                 include $path.'/'.$filename;

  99.                                 self::$_imports[$key] = true;



  100.                                 return true;

  101.                         } elseif(!$force) {

  102.                                 return false;

  103.                         } else {

  104.                                 throw new Exception('Oops! System file lost: '.$filename);

  105.                         }

  106.                 }

  107.                 return true;

  108.         }



  109.         public static function handleException($exception) {

  110.                 discuz_error::exception_error($exception);

  111.         }





  112.         public static function handleError($errno, $errstr, $errfile, $errline) {

  113.                 if($errno & DISCUZ_CORE_DEBUG) {

  114.                         discuz_error::system_error($errstr, false, true, false);

  115.                 }

  116.         }



  117.         public static function handleShutdown() {

  118.                 if(($error = error_get_last()) && $error['type'] & DISCUZ_CORE_DEBUG) {

  119.                         discuz_error::system_error($error['message'], false, true, false);

  120.                 }

  121.         }



  122.         public static function autoload($class) {

  123.                 $class = strtolower($class);

  124.                 if(strpos($class, '_') !== false) {

  125.                         list($folder) = explode('_', $class);

  126.                         $file = 'class/'.$folder.'/'.substr($class, strlen($folder) + 1);

  127.                 } else {

  128.                         $file = 'class/'.$class;

  129.                 }



  130.                 try {



  131.                         self::import($file);

  132.                         return true;



  133.                 } catch (Exception $exc) {



  134.                         $trace = $exc->getTrace();

  135.                         foreach ($trace as $log) {

  136.                                 if(empty($log['class']) && $log['function'] == 'class_exists') {

  137.                                         return false;

  138.                                 }

  139.                         }

  140.                         discuz_error::exception_error($exc);

  141.                 }

  142.         }



  143.         public static function analysisStart($name){

  144.                 $key = 'other';

  145.                 if($name[0] === '#') {

  146.                         list(, $key, $name) = explode('#', $name);

  147.                 }

  148.                 if(!isset($_ENV['analysis'])) {

  149.                         $_ENV['analysis'] = array();

  150.                 }

  151.                 if(!isset($_ENV['analysis'][$key])) {

  152.                         $_ENV['analysis'][$key] = array();

  153.                         $_ENV['analysis'][$key]['sum'] = 0;

  154.                 }

  155.                 $_ENV['analysis'][$key][$name]['start'] = microtime(TRUE);

  156.                 $_ENV['analysis'][$key][$name]['start_memory_get_usage'] = memory_get_usage();

  157.                 $_ENV['analysis'][$key][$name]['start_memory_get_real_usage'] = memory_get_usage(true);

  158.                 $_ENV['analysis'][$key][$name]['start_memory_get_peak_usage'] = memory_get_peak_usage();

  159.                 $_ENV['analysis'][$key][$name]['start_memory_get_peak_real_usage'] = memory_get_peak_usage(true);

  160.         }



  161.         public static function analysisStop($name) {

  162.                 $key = 'other';

  163.                 if($name[0] === '#') {

  164.                         list(, $key, $name) = explode('#', $name);

  165.                 }

  166.                 if(isset($_ENV['analysis'][$key][$name]['start'])) {

  167.                         $diff = round((microtime(TRUE) - $_ENV['analysis'][$key][$name]['start']) * 1000, 5);

  168.                         $_ENV['analysis'][$key][$name]['time'] = $diff;

  169.                         $_ENV['analysis'][$key]['sum'] = $_ENV['analysis'][$key]['sum'] + $diff;

  170.                         unset($_ENV['analysis'][$key][$name]['start']);

  171.                         $_ENV['analysis'][$key][$name]['stop_memory_get_usage'] = memory_get_usage();

  172.                         $_ENV['analysis'][$key][$name]['stop_memory_get_real_usage'] = memory_get_usage(true);

  173.                         $_ENV['analysis'][$key][$name]['stop_memory_get_peak_usage'] = memory_get_peak_usage();

  174.                         $_ENV['analysis'][$key][$name]['stop_memory_get_peak_real_usage'] = memory_get_peak_usage(true);

  175.                 }

  176.                 return $_ENV['analysis'][$key][$name];

  177.         }

  178. }



  179. class core_ext extends core

  180. {

  181.         private static $_tables;

  182.         private static $_imports;



  183.         public static function t($name) {

  184.                 return self::_make_obj($name, 'table', DISCUZ_TABLE_EXTENDABLE);

  185.         }



  186.         protected static function _make_obj($name, $type, $extendable = false, $p = array()) {

  187.                 $pluginid = null;

  188.                 if($name[0] === '#') {

  189.                         list(, $pluginid, $name) = explode('#', $name);

  190.                 }

  191.                 $cname = $type.'_'.$name;



  192.                 if($pluginid == null && defined('EXTEND') && EXTEND === true) {

  193.                         $name_ext = $name . '_ext';

  194.                         if(self::import('class/'.$type.'/'.$name_ext, '', false, true) != false) {

  195.                                 $cname .= '_ext';

  196.                         }

  197.                 }



  198.                 if(!isset(self::$_tables[$cname])) {

  199.                         if(!class_exists($cname, false)) {

  200.                                 self::import(($pluginid ? 'plugin/'.$pluginid : 'class').'/'.$type.'/'.$name);

  201.                         }

  202.                         if($extendable) {

  203.                                 self::$_tables[$cname] = new discuz_container();

  204.                                 switch (count($p)) {

  205.                                         case 0:        self::$_tables[$cname]->obj = new $cname();break;

  206.                                         case 1:        self::$_tables[$cname]->obj = new $cname($p[1]);break;

  207.                                         case 2:        self::$_tables[$cname]->obj = new $cname($p[1], $p[2]);break;

  208.                                         case 3:        self::$_tables[$cname]->obj = new $cname($p[1], $p[2], $p[3]);break;

  209.                                         case 4:        self::$_tables[$cname]->obj = new $cname($p[1], $p[2], $p[3], $p[4]);break;

  210.                                         case 5:        self::$_tables[$cname]->obj = new $cname($p[1], $p[2], $p[3], $p[4], $p[5]);break;

  211.                                         default: $ref = new ReflectionClass($cname);self::$_tables[$cname]->obj = $ref->newInstanceArgs($p);unset($ref);break;

  212.                                 }

  213.                         } else {

  214.                                 self::$_tables[$cname] = new $cname();

  215.                         }

  216.                 }

  217.                 return self::$_tables[$cname];

  218.         }



  219.         public static function import($name, $folder = '', $force = true, $ext = false, $exists = false, $getpath = false, $getmts = false) {

  220.                 $key = $folder.$name;

  221.                 if(!isset(self::$_imports[$key])) {

  222.                         $path = DISCUZ_ROOT.'/source/'.$folder;

  223.                         if($ext) $path = DISCUZ_ROOT.'/extend/'.$folder;



  224.                         if(strpos($name, '/') !== false) {

  225.                                 $pre = basename(dirname($name));

  226.                                 $filename = dirname($name).'/'.$pre.'_'.basename($name).'.php';

  227.                         } else {

  228.                                 $filename = $name.'.php';

  229.                         }



  230.                         if(is_file($path.'/'.$filename)) {

  231.                                 if($exists == true) return true;//只返回存在与否

  232.                                 if($getmts == true) return filemtime($path.'/'.$filename);

  233.                                 self::$_imports[$key] = true;

  234.                                 if($getpath == true) return $path.'/'.$filename;//只返回路径,而且只要返回路径就肯定载入了类文件

  235.                                 $rt = include $path.'/'.$filename;

  236.                                 return $rt;

  237.                         } elseif(!$force) {

  238.                                 return false;

  239.                         } else {

  240.                                 throw new Exception('Oops! System file lost: '.$filename);

  241.                         }

  242.                 }

  243.                 return true;

  244.         }



  245.         public static function autoload($class) {

  246.                 $class = strtolower($class);

  247.                 if(strpos($class, '_') !== false) {

  248.                         list($folder) = explode('_', $class);

  249.                         $file = 'class/'.$folder.'/'.substr($class, strlen($folder) + 1);

  250.                 } else {

  251.                         $file = 'class/'.$class;

  252.                 }



  253.                 try {



  254.                         if(defined('EXTEND') && EXTEND === true && (strpos($class, 'table') === FALSE) && self::import($file . '_ext', '', false, true, true) === true) {

  255.                                 $mts = defined('EXTEND_NO_DETECT') && EXTEND_NO_DETECT === false ? (string)date('Ymd~Hi~s', self::import($file . '_ext', '', false, true, false, false, true)) : '';

  256.                                 $cacf = DISCUZ_ROOT.'/data/sysdata/'.$class.'_ext'. $mts .'.php';

  257.                                 if(defined('EXTEND_NO_CACHE') && EXTEND_NO_CACHE === true || !is_file($cacf)) {

  258.                                         $class_cont = self::combine_class($class);

  259.                                         self::put_class($class_cont, $cacf);

  260.                                 }

  261.                                 include $cacf;

  262.                                 return true;

  263.                         }

  264.                         self::import($file);

  265.                         return true;



  266.                 } catch (Exception $exc) {



  267.                         $trace = $exc->getTrace();

  268.                         foreach ($trace as $log) {

  269.                                 if(empty($log['class']) && $log['function'] == 'class_exists') {

  270.                                         return false;

  271.                                 }

  272.                         }

  273.                         discuz_error::exception_error($exc);

  274.                 }

  275.         }



  276.         static function combine_class($class, $parentfullpath = '', $childfullpath = '') {

  277.                 if($parentfullpath == '' || $childfullpath == '') {

  278.                         $class = strtolower($class);

  279.                         if(strpos($class, '_') !== false) {

  280.                                 list($folder) = explode('_', $class);

  281.                                 $file = 'class/'.$folder.'/'.substr($class, strlen($folder) + 1);

  282.                         } else {

  283.                                 $file = 'class/'.$class;

  284.                         }

  285.                         $parentfullpath = $parentfullpath == '' ? self::import($file, '', false, false, false, true) : $parentfullpath;

  286.                         $childfullpath = $childfullpath == '' ? self::import($file . '_ext', '', false, true, false, true) : $childfullpath;

  287.                 }

  288.                

  289.                 $class_ext_cont = file_get_contents($childfullpath);

  290.                 preg_match_all('/class[\t ]+(\w+)_ext[\t ]+extends[\t ]+(\w+)/i', $class_ext_cont, $matches);

  291.                 $class_ext_cont = preg_replace('/class[\t ]+(\w+)_ext[\t ]+extends[\t ]+(\w+)/i', 'class ${1} extends ${2}_ext', $class_ext_cont);

  292.                 $class_ext_list = $matches[2];



  293.                 $class_cont = file_get_contents($parentfullpath);

  294.                 if(!empty($class_ext_list) && is_array($class_ext_list)) {

  295.                         foreach($class_ext_list as $class_v) {

  296.                                 $class_cont = preg_replace("/class[\t ]+(".$class_v.")/i", 'class ${1}_ext', $class_cont, 1);

  297.                                 $class_cont = preg_replace("/function[\t ]+(".$class_v.")/i", 'function __construct', $class_cont, 1);

  298.                                 //TODO 对构造函数的处理,如果文件中存在其他类且有同名方法,会导致错误

  299.                         }

  300.                 }

  301.                 $str_find = array('<?php', '?>');

  302.                 $class_cont = str_replace($str_find, '', $class_cont.$class_ext_cont);



  303.                 return "<?php\n\n//Created: ".date("M j, Y, G:i")."\n".$class_cont;

  304.         }



  305.         static function put_class($cont, $cacf) {

  306.                 if(empty($cont)) return false;

  307.                 return file_put_contents($cacf, $cont, LOCK_EX);

  308.         }



  309.         static function setconstant() {

  310.                 global $_G;

  311.                 if($_G['config']['extend'] && is_array($_G['config']['extend'])) {

  312.                         foreach($_G['config']['extend'] as $k => $v) {

  313.                                 define(strtoupper($k), $v['on']);

  314.                         }

  315.                 }

  316.         }

  317. }



  318. class C extends core_ext {}

  319. class DB extends discuz_database {}

  320. ?>

复制代码
懒人补丁:(解压覆盖论坛根目录,请确认你数据库表是InnoDB 数据库引擎,该补丁仅适用于2020.05.05前后!)
游客,如果您要查看本帖隐藏内容请回复


帖子地址: 

 懒得打字嘛,点击右侧快捷回复【最新发布】   【赞助站长帮享更多权益】
高级模式
您需要登录后才可以回帖 登录 | 立即注册 用百度帐号登录

本版积分规则

收缩
发布主题 快速回复 收藏帖子 返回列表 联系我们 搜索 官方QQ群
成为站长帮会员,享受Discuz!建站插件、模板、技术支持等全方位服务。 会员登录 注册会员

站长帮.(zzb7.net) ( 京ICP备18032088号-2 ) |GMT+8, 2020-5-29 16:10

Processed in 0.215023 second(s) , Gzip On, Redis On. 小黑屋|繁體
快速回复 返回顶部 返回列表