最近将一个两年多以前的用phpwind9.0搭建的论坛升级到php7,遇到了页面无法打开,显示为500错误,排查了一整天时间,终于解决!

1、打开文件:src/applications/appcenter/service/srv/PwDebugApplication.php

定位到214行代码

修改代码:

if (!$toinstall instanceof iPwInstall) continue;
$r = $toinstall->install($install);
if ($r instanceof PwError) return $this->_e($install, $r);
$install->addInstallLog('service', $_tmp);

修改后

if($toinstall instanceof iPwInstall){
$r = $toinstall->install($install);
if ($r instanceof PwError) return $this->_e($install, $r);
$install->addInstallLog('service', $_tmp);
}

2、打开文件:/src/windid/service/base/WindidUtility.php 

定位到94行代码

修改为:

if (!isset($exts[$imageInfo[2]])) return false;

3、修改preg_replace函数为preg_replace_callback
src/library/ubb/PwUbbCode.php
src/library/ubb/PwSimpleUbbCode.php
说明:preg_replace正则表达式不再支持/e,需要使用preg_replace_callback来替换

4、/wind/web/WindForward.php:96

修改代码:

} elseif ($merge && !empty($this->vars[$key])) {

修改后:

} elseif ($merge && isset($this->vars[$key]) && $this->vars[$key]) {

5、伪静态开启后出现错误修复

定位代码到:/src/library/route/PwRoute.php:217

修改代码:

foreach ($this->params as $k => $v) {
if ($route[$k] === $router->$methods[$k]() && $flag === $flags[$k]) $flag = $consts[$k];
$_args[$v] = $route[$k];
unset($args[$k]);
}

修改后:

foreach ($this->params as $k => $v) {
$_method=$methods[$k];
if ($route[$k] === $router->$_method() && $flag === $flags[$k]) $flag = $consts[$k];
$_args[$v] = $route[$k];
unset($args[$k],$_method);
}

结论:此行代码中没有在foreach循环之内,因此不能出现关键字continue,而在php7前continue关键字是允许不在foreach中出现的,由此可见php7更加规范了;php7对preg_replace不在支持"/e"修饰符,是一个大坑;empty在php5.5后支持表达式了,第4处可以不修改

phpwind9.0升级到php7后出现的问题修复的更多相关文章

  1. 在lnmp环境下,将原来的PHP7.0升级到PHP7.2

    基础环境: 系统:centos6.8   环境:lnmp 停止PHP7.0的版本,在做如下操作: 1.下载php-7.2.6.tar.bz2软件包放在/opt 路径下 mkdir /usr/local ...

  2. php7.0升级到php7.1

    $ add-apt-repository ppa:ondrej/php$ apt-get update$ apt-get upgrade php 来源:http://www.wuweixin.com/ ...

  3. php从5.6升级到php7后,扩展出现segment fault的问题解决

    php7的文档中有这样的描述: Both mistakes might cause memory corruptions and segfaults:1)char *str;long str_len; ...

  4. 升级安装php7要考虑的几个方面

    php7从推出到现在,前两天官方已经发布到7.2版本,把自己升级和安装php7中遇到的问题和解决方法做一个笔记,内容主要包括:1) mysql2) php3) nginx4) memcache扩展5) ...

  5. 解决升级PHP7后 微信公众号收不到消息

    服务器配置Linux+Nginx+PHP5.5+mysql index方法配置微信的关注回复.菜单事件.多客服.自动回复等 public function actionIndex() { if (is ...

  6. [教程]phpwind9.0应用开发基础教程

    这篇文章着重于介绍在9.0中如何开发一个插件应用的示例,step by step来了解下在9.0中一个基础的应用包是如何开发的.1.目录结构OK,首先是目录结构,下面是一个应用我们推荐的目录. 应用包 ...

  7. 升级win8.1后mysql服务不能启动的问题

    升级win8.1后发现服务列表中MySQL55不见了. 1. 先把服务恢复. mysql没有看到maitenance,找到安装文件 mysql-installer-community-5.6.12.0 ...

  8. phpwind9.0模板制作教程——制作论坛风格

    由于论坛模板机制和门户等模板机制不同,所以今天我就先重点讲讲论坛模板制作的大概过程. 一.先来熟悉下phpwind9.0的论坛模板机制. 其实phpwind9.0的模板机制和discuzx2.5差不多 ...

  9. gcc5.1.0升级指南

    请使用root权限用控制台安装gcc5.1.0(重要) 1.首先把旧的gcc相关的编译工具安装好(没有安装会导致后面的错误) yum upgrade gcc //升级gcc库 yum -y insta ...

随机推荐

  1. esp8266 SDK开发之GPIO中断

    先秀一下自己焊的板子,黑的开关用于复位,蓝的开关用于烧录程序. 首先要明确的是esp8622的大多数管脚都有多个功能, 比如可以用来当做GPIO管脚,还可以用来当做SPI管脚. 如下图所示 使用PIN ...

  2. ubuntu更换阿里源

    网上应该可以找到很多关于ubuntu源的设置方法,但是如果不搞清楚就随便设置的话,不仅不能起到应有的效果,还会由于一些问题导致apt不可用. 最正确的更换源的方法应该如系统提示的: ## a.) ad ...

  3. java面向对象知识整理(一)

    1.面向对象思想 概述:面向对象是相对于面向过程而言的,面向过程强调的是功能,面向对象强调的是将功能封装进对像,强调具备功能的对象. 特点:(1)符合人们思考习惯的一种思想. (2)将复杂的事情简单化 ...

  4. Sql 关于 查俩个表 第二个表用到第一个表的某一个数据

    今天在写程序的时候遇到一个问题  有一个这个需求 select top 1 Name,[Address] from UserInfo;select * from shoppingAddress whe ...

  5. Micro Templating源码分析

    关于模板,写页面的人们其实一直在用,asp.net , jsp , php, nodejs等等都有他的存在,当然那是服务端的模板. 前端模板,作为前端人员肯定是多少有接触的,Handlebars.js ...

  6. Android Studio 查看手机CPU信息

    在Android开发中,我们想要获取手机是什么CPU架构,可以通过下面方式: 1.进入adb 终端 adb shell 2.进入proc目录 cd /proc/ 3.查看cpu信息 cat cpuin ...

  7. Java框架之Spring(五)

    本文主要介绍Spring中, 1 Spring JDBC 2 使用注解方式管理事务的传播行为 3 采用XML 方式配置事务 4 SH 整合 5 SSH 整合 一.Spring JDBC 1) 导包 , ...

  8. Java学习笔记1(HelloWorld)

    编写HelloWorld是一种仪式: 1.下载JDK,安装,注意路径中不要存在中文. 2.添加环境变量,加入bin目录 3.写一个文本,内容如下,后缀改成.java,注意文本的名称为HelloWorl ...

  9. Git-分布式版本控制系统(二)

    工作区(Woring directory ) 版本区(repository,即隐藏的.git文件) Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git ...

  10. Maven代理设置

    公司需要设置代理才能上网,而运行Maven时需要下载依赖的库. 怎么办呢? 原来Maven也像IE一样,可以设置HTTP代理的. 步骤如下: ·编辑 ~/.m2/setting.xml 文件.如果该目 ...