背景音乐
动漫∨
查看: 4817|回复: 3
初音家二小姐
chibimiku@TSDM

超级版主
UID:94
精华:2
主题:2361
帖子:15526
威望:62503
天使币:463026
宣传度:23836
天然°:28788
腹黑°:24899
精灵:551
哞币:0
CP:
阅读权限:190
注册时间:2010-10-5
来自:tsdm_dev
状态: 不在线

凤王 Lv. 5

  • TA的每日心情
    星灵

    签到天数: 495天 高等初音圣堂武士

  • HP3500/3500
    饱腹度95/100
    经验值5000/1000

    初音家二小姐 发表于 2015-12-4 17:30:55 来自手机 |显示全部楼层
    这两天php7 发布了stable版,鉴于官方许诺的巨大优化,我们尝试在线下做discuz x2从php5.3升级到php7 的修改。
    天使的Discuz! TSDM SP由discuz x2进行大量的修改和优化而来,同时在升级方面官方支持基本为零,因此对X2.5及以后版本不予考虑。
    初音家二小姐
    chibimiku@TSDM

    超级版主
    UID:94
    精华:2
    主题:2361
    帖子:15526
    威望:62503
    天使币:463026
    宣传度:23836
    天然°:28788
    腹黑°:24899
    精灵:551
    哞币:0
    CP:
    阅读权限:190
    注册时间:2010-10-5
    来自:tsdm_dev
    状态: 不在线

    凤王 Lv. 5

  • TA的每日心情
    星灵

    签到天数: 495天 高等初音圣堂武士

  • HP3500/3500
    饱腹度95/100
    经验值5000/1000

    初音家二小姐 发表于 2015-12-4 17:38:03 来自手机 |显示全部楼层
    本帖最后由 初音家二小姐 于 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)复制主题功能似乎不行,待查。

    使用道具 举报

    初音家二小姐
    chibimiku@TSDM

    超级版主
    UID:94
    精华:2
    主题:2361
    帖子:15526
    威望:62503
    天使币:463026
    宣传度:23836
    天然°:28788
    腹黑°:24899
    精灵:551
    哞币:0
    CP:
    阅读权限:190
    注册时间:2010-10-5
    来自:tsdm_dev
    状态: 不在线

    凤王 Lv. 5

  • TA的每日心情
    星灵

    签到天数: 495天 高等初音圣堂武士

  • HP3500/3500
    饱腹度95/100
    经验值5000/1000

    初音家二小姐 发表于 2015-12-4 17:50:36 来自手机 |显示全部楼层
    升级
    本帖最后由 初音家二小姐 于 2015-12-21 14:16 编辑

    2楼:环境配置本身发生的变化
    (1)由于php5.4以上的版本已经移除mysql.dll扩展的支持,需要用mysqli.dll,因此需要改配置,另外php自己调mysql的时候可能要大改对应的core下的db类
    +具体来说有这么几个大块:
    - class下的class_core.php,里面所有db相关的函数,都需要修改。搜索mysql_开头的函数即可
    - uc相关,主要是uc_server和uc_client的lib/db.class.php,这两个只有class名称不同,内部相同,参考别人的做法直接require_once UC_ROOT.'lib/dbi.class.php'换成dbi类更合适一些,方便兼容老版本
    - uc下的uc_server/model/base.php 对相应的class调用修改
    - uc和主程序的Install相关,db备份,后台mysql操作这块暂时不想修改,因为修改出来相当于是tsdm SP专用,无法给外部通用使用。我们不提供在网站后台直接运行sql的功能,减少注入风险。

    (2)系统插件支持:需要手动编译memcache的windows版插件
    手动编译了php_memcache.dll extension on windows for php 7.0.1 x64 TS/NTS VC14
    使用需要注意版本,x64和x86不能混用。验证方法在php.ini里加载php_memcache.dll用php -v看能否正常起,然后memcache简单case能否正常set和get,最后看discuz的debug信息是否有memcache on。
    如何编译的步骤较多,可以下个vs2015自己搞一把x86版本。社区版是免费的。这个x64/x86的选择方法貌似是由你选择进去vc2015时候命令行的版本决定的。configure的时候会显示希望编译哪个版本,TS和NTS需要用编译选项里那个thread safe来决定。
    http://www.tsdm.me/forum.php?mod=viewthread&tid=667499

    *注意一个问题,这个版本的memcache,配置本机host时必须写127.0.0.1,localhost会无法连接。

    使用道具 举报

    不死鸟之翼
    论坛开发团队//邮件i@azurefx.name,不常看站内消息

    SSS☆
    UID:1112128
    头衔:TSDM Technical Support
    精华:0
    主题:317
    帖子:6683
    威望:20689
    天使币:40683
    宣传度:773
    天然°:24312
    腹黑°:24228
    精灵:157
    哞币:0
    CP:アレンのエクボ
    阅读权限:170
    注册时间:2014-11-1
    来自:Parallel Universe
    状态: 不在线

    飴か夢 Lv. 27

  • TA的每日心情
    开心

    签到天数: 101天[LV.7]常住居民III

  • deprecated (e.g regex /e flag)
    default behavior (e.g htmlspecialchars)

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    加天使同城QQ群,有威望奖励~

    Archiver|手机版|WAP| 天使动漫论坛

    声明:本站所有内容资源均来自网络&网友分享,仅供学习试用。如侵犯您的权益请告知,将会第一时间删除。广告联系我的邮箱

    GMT+8, 2021-9-17 02:44 , Processed in 0.130007 second(s), 28 queries , Gzip On, Memcache On.

    Powered by Discuz! TSDM SP

    © 2010-2014 Style by chibimiku@TSDM

    回顶部