|
|

本帖最后由 初音家二小姐 于 2015-12-21 16:51 编辑
1楼:代码类已知出问题的修改点:
(1)source\class\class_core.php
if(PHP_VERSION < '5.3.0') {
set_magic_quotes_runtime(0);
}
该方法已被移除,如果报错可以直接干掉,因为期望是判断php_version比5.3小.
\source\module\pdnovel\admincp_collectset.php
在pdnovel小说模块中错误地滥用了这个功能,可以考虑直接移除,在后面对提交的content进行检查.
(2)实例化类时使用了旧的方法名称(日志刷新警告)。
该问题至少会出现在class_core里,例如,discuz类。具体原因是类的实例化用了旧的实例化方法名称,直接用的类名(),比如function discuz_core()。
看日志有谁报错,把类名的那个方法名改成__construct(),其他不变即可。
(3)htmlspecialchars默认编码变为utf8导致所有用到这个方法的地方都返回了空(搜索功能fail、pm短消息消失、回复引用时引用为空、点评的读写、版块编辑等等)。
从php5.4开始的改变,会在我们这种非utf8的应用遇到,应对策略是先重新封装一个htmlspecialchars,在每个调用它的地方进行修改。
定位方法可以用grep批量查找*.php,用discuz自己封装的dhtmlspecialchars不会有此问题。
设置参数为php5.3使用的 $charset = 'iso8859-1'
----
http://php.net/manual/en/function.htmlspecialchars.php
根据官方的说法,可以通过php.ini设置默认编码解决这个问题,不过在看到它之前我已经这么做了,经检查,有问题的时候php.ini没设置default charset,不确定能否解决这个问题。
(4)wap版看帖界面viewthread涉及图片的,查看图片按钮消失
照抄php7升级引入的issue,https://github.com/branchzero/discuz-x32-php7
function_discuzcode.php里function discuzcode引入的问题。
查找[/img]定位到这两行替换,其中bbcodeurl($matches[1], '') 这块应该替换为[查看图片]对应的文字链接,注意$viewimg需要在use那加个参数传进去拼接
$message = preg_replace_callback("/\[img\]\s*([^\[\<\r\n]+?)\s*\[\/img\]/is", function($matches) use($allowimgcode, $lazyload, $pid, $allowbbcode) { return $allowimgcode ? parseimg(0, 0, $matches[1], intval($lazyload), intval($pid), 'onmouseover="img_onmouseoverfunc(this)" '.($lazyload ? 'lazyloadthumb="1"' : 'onload="thumbImg(this)"')) : ($allowbbcode ? (!defined('IN_MOBILE') ? bbcodeurl($matches[1], '<a href="{url}" target="_blank">{url}</a>') : bbcodeurl($matches[1], '')) : bbcodeurl($matches[1], '{url}')); }, $message);
(5)[xweibo]插件升级,和其他插件。
这玩意儿一言难尽,主要说xweibo是因为他的改动最大,基本花了两天时间摸索。熟悉了之后改起来会很简单。TSDM除了xweibo修改外,只修改了pokemon(错误的类创建)和早期的几个插件(split()方法移除,换成explode)。
主要集中在两大块。
1、mysql库的升级。xwb插件在/source/plugin和根目录下/wxb都有代码,都会用到。由于hook.class.php里引入不正确的写法,导致论坛在加载他会直接崩溃,而且白屏不报错。在debug的时候可以先disable掉它。先说mysql库这块有两种issue,一是初始化一个db类然后使用,二直接在代码里用mysql方法,具体排查起来,请用grep "mysql_"的方式查找,改起来可以统一改用discuz的DB类,直接用像DB::table()这种用法就行了,不鸟他自己的mysql类,减少重复劳动。加载他自己db类的地方可以直接干掉。
对于大量的mysql_escape和mysql_real_escape方法,需要在discuz自己的db类里封装好mysqli_real_escape方法(因为需要用到$curlink,每次写很烦,具体可以查一下官方php对mysqli库的manual说明),直接参考DB类里的写法就行了,恩就是class_core.php里面。
2、错误的类创建方法。
在创建的时候用了 $newclass = & new Foo;,具体看也是崩溃,php -l依次检查所有的php文件即可发现。
具体来说是操作符创建的对象不能以引用方式赋值给变量。php5下时警告,php7直接boom掉了:Parse error: syntax error, unexpected 'new' (T_NEW)。
(6)session插入数据库报错。
在admincp插入和普通用户session插入都有问题,在添加key的时候会出现错误的field插入,key分别是0、1、2、3…等等,原因不明。
目前的做法是在插入前重新弄一个array纠正他。类似的问题还有插入附件时db报错进行的报错。
这个错误的原因在修改DB::fetch的时候,错误使用了result的数据类型,应该用MYSQLI_ASSOC,写成了MYSQLI_BOTH,会导致fetch的时候多出一组多余的数据,key是从0开始计数的一组数。
Program messages:
[Line: 0089]forum.php(require)
[Line: 0544]source\module\forum\forum_post.php(require_once)
[Line: 0655]source\include\post\post_editpost.php(updateattach)
[Line: 0243]source\function\function_post.php(DB::insert)
[Line: 1058]source\class\class_core.php(DB::query)
(7)注册时提示验证码失败
在更换了数据库类后,重写的fetch_first在取不到的时候返回不是false而是null,在这个地方进行全等判断===出现错误导致报错。
(8)复制主题功能似乎不行,待查。
|
|
|
|
|
|