Linux下手动将php5 升级到 7

注:看这篇文章之前,请先确保你有一定服务器的操作知识和一定的php基础,不然的话清尽量找相对熟悉的人指导操作,如果升级中发生任何不可挽回的问题,本人不对其负任何责任。

下载你需要的php版本并解压

我下载的是7.3.4版本

wget http://cn2.php.net/distributions/php-7.3.4.tar.gz
tar zxvf php-7.3.4.tar.gz
cd php-7.3.4

准备安装

生成配置文件

[root@ php-7.3.4]# ./buildconf
buildconf: checking installation...
buildconf: autoconf version 2.69 (ok)
rebuilding aclocal.m4
rebuilding configure
rebuilding main/php_config.h.in

开始配置

下面这条命令是配置php7的安装明细,你需要关心以下几点:

  • 我升级php7是为了支持wordpress
  • 核心的模块是
  • mysql[可选]
  • mysqli
  • pdo-mysql
  • 当前配置 php-fpm 用户组是www,你可以根据你机器的情况再进行修改
[root@ php-7.3.4]# ./configure --prefix=/usr/local/php --exec-prefix=/usr/local/php --bindir=/usr/local/php/bin --sbindir=/usr/local/php/sbin --includedir=/usr/local/php/include --libdir=/usr/local/php/lib/php --mandir=/usr/local/php/php/man --with-config-file-path=/usr/local/php/etc --with-mysql-sock=/var/run/mysql/mysql.sock --with-mcrypt=/usr/include --with-mhash --with-openssl --with-mysql=shared,mysqlnd --with-mysqli=shared,mysqlnd --with-pdo-mysql=shared,mysqlnd --with-gd --with-iconv --with-zlib --enable-zip --enable-inline-optimization --disable-debug --disable-rpath --enable-shared --enable-xml --enable-bcmath --enable-shmop --enable-sysvsem --enable-mbregex --enable-mbstring --enable-ftp --enable-gd-native-ttf --enable-pcntl --enable-sockets --with-xmlrpc --enable-soap --without-pear --with-gettext --enable-session --with-curl  --with-jpeg-dir --with-freetype-dir --enable-opcache --enable-fpm --enable-fastcgi --with-fpm-user=www --with-fpm-group=www --without-gdbm --disable-fileinfo

该配置执行后,需要结果中没有报错,才算成功(不算warning)。
如果碰到了问题,就根据问题解决问题,我碰到了如下的问题:

  • libzip版本不对

开始编译和安装

执行下面代码

[root@ php-7.3.4]# make clean && make && make install

该过程根据网速时间可能会比较长。
该安装执行后,结果中没有报错,才算成功。
完成后需要执行 make test 来进行安装检验,这里没碰到问题,所以这里不做深究。
如果碰到了问题,就根据问题解决问题,我碰到了如下的问题:

  • cp: cannot stat `ext/phar/phar.phar’: No such file or directory

验证模块是否安装到对应目录

上面提到了几个核心模块:

  • mysql[可选]
  • mysqli
  • pdo-mysql

如果你没有特殊做配置,文件一般在 /usr/local/php/lib/php/extensions/no-debug-non-zts-xxxxx 下面
可以参考下图:

配置文件

主要需要配置以下文件

  • php.ini
  • php-fpm.conf
  • www.conf
[root@ php-7.3.4]# cp php.ini-production /usr/local/php/etc/php.ini
[root@ php-7.3.4]# cp /root/php-src-master/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@ php-7.3.4]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
[root@ php-7.3.4]# cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf

php.ini

需要将上面的核心模块在 php.ini 中设置为开启,将下面代码添加到 php.ini 末尾

[php]
zend_extension=/usr/local/php7/lib/php/extensions/no-debug-non-zts-xxxxx/opcache.so
extension=/usr/local/php7/lib/php/extensions/no-debug-non-zts-xxxxx/mysqli.so
extension=/usr/local/php7/lib/php/extensions/no-debug-non-zts-xxxxx/pdo_mysql.so

这里要注意的是我为了保险起见在这里设置了绝对路径,你可以根据个人习惯选择使用相对路径。

php-fpm.conf

这里主要是添加日志和配置文件,将下面代码添加到 php-fpm.conf 末尾

######设置错误日志的路径
error_log = /var/log/php-fpm/error.log
######引入www.conf文件中的配置
include=/usr/local/php7/etc/php-fpm.d/*.conf

www.conf

这里是 php-fpm 的进程服务扩展配置

######设置用户和用户组
user = www
group = www
listen.owner = www
listen.group = www
listen.mode = 0660

######根据nginx.conf中的配置fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;设置PHP监听
; listen = 127.0.0.1:9000   #####不建议使用
listen = /var/run/php-fpm/php-fpm.sock

######开启慢日志
slowlog = /var/log/php-fpm/$pool-slow.log
request_slowlog_timeout = 10s

######设置php的session目录(所属用户和用户组都是nginx)
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session

其他配置

添加php环境变量

[root@ ~]# echo -e '\nexport PATH=/usr/local/php/bin:/usr/local/php7/sbin:$PATH\n' >> /etc/profile && source /etc/profile

设置PHP日志目录和php-fpm进程文件(php-fpm.sock)目录

#######设置PHP日志目录和php-fpm的运行进程ID文件(php-fpm.sock)目录
[root@ ~]# mkdir -p /var/log/php-fpm/ && mkdir -p /var/run/php-fpm && cd /var/run/ && chown -R nginx:nginx php-fpm
#######修改session的目录配置
[root@ etc]# mkdir -p /var/lib/php/session
[root@ etc]# chown -R www:www /var/lib/php

设置PHP开机启动以及测试配置文件是否正确

######配置开机自启动,增加到主机sysV服务
[root@ php-7.3.4]# chmod +x /etc/init.d/php-fpm
[root@ php-7.3.4]# chkconfig --add php-fpm
[root@ php-7.3.4]# chkconfig php-fpm on
######测试PHP的配置文件是否正确合法
[root@ sbin]# php-fpm -t
[03-Apr-2019 17:50:04] NOTICE: configuration file /usr/local/php/etc/php-fpm.conf test is successful

启动服务

[root@ ]# /etc/init.d/php-fpm start
Starting php-fpm  done

通过命令 ps -aux|grep php 查看启动服务是否成功;
通过命令 php -v 查看升级是否成功;
通过查看 phpinfo.php 页面查看模块是否安装成功;

因为wordpress升级的php7

如果你是因为wordpress升级的php7,那么下面的内容你可能会感兴趣。

nginx

如果nginx启动后页面显示502,你就查一下nginx的日志,我碰到了以下几个问题:

  • fastcgi_pass报错
  • 这里可以看一下上面www.conf配置的第10行,看到 listen = /var/run/php-fpm/php-fpm.sock 
  • 那么你的nginx.conf的配置应该让fastcgi_pass也指向这一行
  • fastcgi_pass unix: /var/run/php-fpm/php-fpm.sock 
  • 如果你有另一个配置 fastcgi_pass unix:/tmp/php-cgi.sock 那么请注释掉
  • Call to undefined function mysqli_connect 找不到mysqli_connect方法
  • 查看php里面的mysqli组件是否没有安装好,可以通过 phpinfo.php 查看到

如果你的nginx没问题了,但是进入wordpress提示建立数据库连接错误,那就去检查 wp-config.php 里面数据库里面的主机设置是不是 localhost ,如果是就改为 127.0.0.1 就好了,同样的方法也适用于 phpMyAdmin 。

问题整理

libzip升级

yum remove libzip -y
wget https://nih.at/libzip/libzip-1.2.0.tar.gz
tar -zxvf libzip-1.2.0.tar.gz
cd libzip-1.2.0
./configure
make && make install
ldconfig

cp: cannot stat `ext/phar/phar.phar’: No such file or directory

进入你的php安装目录

cd  ext/phar/
ls -l
cp ./phar.php  ./phar.phar
make install

Nginx: [error] open() "/usr/local/Nginx/logs/Nginx.pid” failed(2:No such file or directory)

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

ZendGuardLoader.so: undefined symbol:

php7不再支持该模块,在 php.ini 中移除该模块。

文章安装及配置部分参考:https://typecodes.com/web/centos7compilephp7.html?utm_source=tuicool&utm_medium=referral

手动升级wordpress5.1.x攻略

我之前是4.x版本,虽然用着没啥问题,但是因为习惯了 markdown 的录入,正好又看到 wordpress 5.x 已经默认支持了 markdown 就考虑做一次升级。

升级步骤

  1. 升级前先备份 wordpress 最好也备份一下数据库
  2. 下载安装包到本地 https://wordpress.org/download/
  3. 解压安装包
  4. 如果你是升级,去掉 wp-content 目录,这个目录主要是你的配置文件和主题
  5. 粘贴剩下的文件到线上的 wordpress 目录
  6. 再浏览器输入你的 http://{wordpress_path}/wp-admin/upgrade.php 
  7. 提示需要升级数据库的话,就点击升级wordpress数据库
  8. 完成

升级的问题

升级过程比较简单,我没碰到什么问题,但是升级后发现 5.x 版本推荐使用 php7.x 版本,而我服务器上的是 5.x 版本,然后我就走上了一条艰难的php升级之路。
具体的php升级心得点击这里

接口文档工具横向评测

评测还在继续…

评测对象

评测维度

  • 编写方式
  • UI
  • 与仓库关联
  • 监控仓库状态
  • 导出PDF
  • markdown
  • 兼容性
  • mock
  • 接口调试
  • 开源
  • 自动化测试
  • 插件

评测方式

通过以下方式得出评测结论

  • 网站简介
  • 提交频率
  • 更新频率
  • 产品示例
  • 舆论口碑

注意:因为没有精力一一部署去测试,所以该评测在一定程度上不够客观。

评测结果

APIDOCYAPINEI
录入接口方式
注释/在线编辑在线编辑在线编辑
UI/交互二次开发自带自带
与仓库关联GIT/SVNNN
监控仓库状态YNN
导出PDFhtml,markdown,jsonPDF
markdownYNN
数据兼容性postmanpostman/swagger/json貌似不支持导入
mock根据接口示例生成支持可编程mock支持可编程mock
接口调试Y 需要是可以访问apidoc服务器的机器才可以YY
自动化测试NYN
开源YYY
插件需要自行二次开发Y
社区维护现在仅有我们自己维护持续维护还有维护

评测总结

这里仅是根据上面数据的个人总结

  • 关于录入接口的方式
  • apidoc更全面更方便,更符合开发流程
  • YApi也可以,值得一提的是YApi支持的导入方式比较多,从某个角度来说也可以通过二次开发实现其他的录入方式
  • NEI仅支持在线录入方式
  • UI/交互
  • apidoc完全就是文档管理的界面交互,因为完全是公司的开发,很多细节还有待提高
  • YApi界面也还可以,满足基本需要
  • NEI的页面交互更像是一个项目管理的交互,而不是针对接口的
  • 与代码仓库的关系
  • 除了apidoc其他的平台都没有直接和代码仓库产生联系
  • YApi可以通过插件的方式,自己开发定时任务或者自己二次开发来跟仓库产生联系
  • 导入导出
  • apidoc支持基本的pdf导出和postman及注释文件的导入,正在规划对swagger的支持
  • YApi的导入导出支持的格式比较多
  • NEI仅支持导出PDF
  • mock
  • apidoc仅支持对文档中示例的基本数据mock
  • YApi支持可编程的mock
  • NEI在mock方面支持的非常好
  • 测试
  • apidoc仅支持数据结果的查看
  • YApi支持自动化测试
  • NEI支持单个或批量的接口测试
  • 其他功能
  • apidoc支持markdown的文档输入方式,除了写接口文档,也支持添加技术文档,甚至可以用来记笔记
  • YApi提供二次开发插件的功能,可根据自己的需要自己开发功能
  • NEI仅有当前提供的功能,因为是开源也可以二次开发,但是社区对二次开发的支持度不高
  • 社区维护
  • apidoc因为是个引擎,所以并没有什么社区维护,仅是根据当前的引擎做需要的开发
  • YApi现在的社区相对活跃,官方代码提交的频率也比较高
  • NEI的社区不是很活跃,代码提交频率也不是很高了,不知道会不会后面就没人维护了

写在最后

如果诉求是对文档进行维护和管理,当前内部开发的apidoc应该是首选,潜力也比较大。
但是要是说对接口本身和接口相关的体系进行管理,从外部开源的项目来看,NEI更优秀。
YApi虽然在两个方面都没有达到最好,但因为对插件开发的支持,以及灵活性,并不输NEI。
所以,如果需求只是对接口文档的管理,建议使用apidoc,同样的投入会得到更高的效果。
但是要对接口这边做全局的管理,可以用YApi+apidoc的方式。
下面提出一个思路以供参考:

  • 从代码中的注释生成文档
  • 然后为apidoc增加一个swagger的文档输出服务
  • 再通过一个定时同步服务,将apidoc输出的swagger直接同步给YApi
  • 这样,所有接口的文档部分由apidoc管理同步给YApi,接口的测试和MOCK能力由Yapi来处理

Unable to execute dex: Java heap space报错

环境是在mac下面,据说是设定的虚拟内存不足,要修改eclipse.ini这个文件。
mac下面eclipse.ini的位置在哪里呢?

 

在eclipse图标上右键,点显示包内容
contents/macOS下面

 


-Xms40m
-Xmx384m
改为
-Xms512m
-Xmx1024m

 

该方法windows系统也通用,只是windows下面eclipse.ini在eclipse根目录。

【项目总结】K Point Fashion

网站地址:http://kpoint-fashion.com/

外部引用的类库:

基本类库:jquery

自主开发的插件:

图片横向滚动插件:imgShowXmove

 

CMS系统:

dede织梦cms管理

 

遇到的障碍:

问题:

如果栏目为三级,如何在三级取到二级菜单的 内容。

解决:

dede本身是可以通过channel里面的type=“self”,来得到同级类别里面的数据的,但是不包含自己。

可以通过run=“php”用php的读取数据库的方式来达到目的。
{dede:field.typeid runphp="yes"}
global $dsql;
$reid = $dsql->GetOne("SELECT reid FROM kp_arctype where id=@me");
@me=$reid["reid"];
{/dede:field.typeid}

这是读取的父级id,如果会弄数据库,你可以根据数据库的字段读取自己想要的东西。
问题延伸:读取的地址带有dede标签格式怎么处理。
解答:有个MfTypedir函数可以帮助我们解决问题

<a href='”.MfTypedir($brand_info[“typedir”]).”‘ ><i></i></a>

得到上述方法,许多二次开发的东西举一反三都可以迎刃而解了。就是写的难看点,有php功底写到模块里面就更好了。

问题:关于dede搜索功能的应用。
解答:搜索功能默认依赖两个主要文件。
plus/search.php
templets/default/search.htm
从search.php下面的代码中我们可以了解到搜索接值的逻辑

 

$pagesize = (isset($pagesize) &amp;&amp; is_numeric($pagesize)) ? $pagesize : 10;
$typeid = (isset($typeid) &amp;&amp; is_numeric($typeid)) ? $typeid : 0;
$channeltype = (isset($channeltype) &amp;&amp; is_numeric($channeltype)) ? $channeltype : 0;
$kwtype = (isset($kwtype) &amp;&amp; is_numeric($kwtype)) ? $kwtype : 1;
$mid = (isset($mid) &amp;&amp; is_numeric($mid)) ? $mid : 0;</code>

if(!isset($orderby)) $orderby=”;
else $orderby = preg_replace(“#[^a-z]#i”, ”, $orderby);

if(!isset($searchtype)) $searchtype = ‘titlekeyword’;
else $searchtype = preg_replace(“#[^a-z]#i”, ”, $searchtype);

if(!isset($keyword)){
if(!isset($q)) $q = ”;
$keyword=$q;
}

$oldkeyword = $keyword = FilterSearch(stripslashes($keyword));

 

看一下dede的标签变量就很容易理解上面的变量是接受的什么值了。如果我想搜索某类别下的产品。

 

<form name=”formsearch” action=”{dede:global.cfg_cmsurl/}/plus/search.php”>
<input type=”hidden” name=”kwtype” value=”0″ />
<input type=”hidden” name=”typeid” value=”{dede:field.typeid/}” />
<input type=”hidden” name=”channeltype” value=”13″ />
<input type=”hidden” name=”searchtype” value=”title” />
<input name=”q” type=”text” class=”search-keyword” value=”” placeholder=”search” />
<button type=”submit”>&nbsp;</button>
</form>

 

channeltype里面的13是我产品模型的id;
searchtype如果是title就是检索标题,如果是titlekeyword就是模糊搜索。

【项目总结】韩雪官方网站

网站地址:

http://hanxue.cc

 

响应式网站:

以宽度为标准响应设备。

 

外部引用的类库:

基本类库:jquery

音乐播放插件:audiojs

视频(图片)展示插件:fancybox

 

二次开发的插件:

专辑页面的图片滚动:gallery(从17素材采集)

 

自主开发的插件:

区域滚动条:jsscroll;

仿ios幻灯片:picFocus

 

CMS系统:

dede织梦cms管理

 

CMS二次开发内容:

跨栏目读取图片;

多层级栏目读取。

 

遇到的障碍:

问题:

图片列表页到幻灯片页面的跳转与定位问题。

解决方案:

从列表页通过修改跳转ur,带值到幻灯片页面,来判断当前应该显示哪一张图片。
设置跳转的目标参数:
url = $(this).attr("href")+"?index="+index;
读取参数:
initIndex = window.location.href.split("index=")[1]

问题:

专辑页面的仿ios的滚动效果,原例中是三张图片循环,要改成显示所有图片,如何让图片从一边到另一边且不影响中间的主要图片。

解决:

插件的原思路就是用transition结合transform来完成切换动画的。以透视效果(perspective),来完成透视效果。原例中用了preserve-3d,加了这个属性,元素间的层叠关系便不再受z-index控制,会影响到切换的效果,所以实例中移除了这个属性。

至于姜三张图片变为多张图片,其实就是加了图片定位的初始化,计算出初始化时,左侧与右侧应该有多少张图片,再加上一定的距离规则让他们平均分布。下面是计算分布的代码块。
this.leftCount = parseInt(this.itemsCount / 2);
this.rightCount = parseInt(this.itemsCount / 2);
this.baseDistance = 280;
this.baseRange = 50;
if (!(this.itemsCount % 2)) {
this.rightCount--;
}
this.baseRange = this.baseRange / this.rightCount;

问题:

专辑页面专辑图片的类别问题。

解决:

因为后台结构中音乐没有音乐专辑图片的直接分类,所以就要单独划出一个分类专门做专辑封面的管理,该项目中我走了弯路,导致从专辑图片到专辑音乐页面的跳转产生了问题,该项目中是利用dede中权重这个参数手动配对,才能保证一个专辑图片能正确链接到该专辑的音乐页面,实际上只要在专辑类别上定一个专辑的模型就可以正确链接到类别列表页面,或者在产品上增加专辑图片的字段,然后将图片推荐到封面页面就好了。

问题:

关于百度分享插件的图片分享。

解决:

我这边测试的结果是图片的分享要图片已经在页面中载入后,统一对符合条件(tag)的图片进行绑定。

而如果你要通过分享链接自动抓取图片显然条件更苛刻了,我这里是自己用js方法去取我想要取的图片,然后将这个图片放到插件的默认参数里面,来达到抓取页面图片的效果。
var picSrc = "{dede:field.picname/}";
window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"{dede:field.title/}","bdMini":"2","bdMiniList":false,"bdPic":picSrc,"bdStyle":"2","bdSize":"24"},"share":{},"image":{"viewList":["tsina","tqq"],"viewText":"","viewSize":"24","tag":"shareImg"}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];

 

问题:

跨栏目层级读取,并读取子栏目中的第一个文章的缩略图。

解决:

涉及到了php的循环和嵌套中的sql查表,直接看代码。

{dede:field.typeid runphp="yes"}//根据typeid做遍历的变量
global $dsql;
$dsql -> SetQuery("SELECT * FROM test_arctype where reid=@me");//查当前类别下的所有子类别
@me="";
$dsql -> Execute();
$dsqls = $dsql;
while($son = $dsqls->GetArray()){//开始循环输出
$sid = $son['id'];
$sonarc = $dsql->GetOne("SELECT litpic FROM test_archives where typeid=$sid ORDER BY `snow_archives`.`senddate` desc");//查出子类里面第一个文档的缩略图
$sonarc = $sonarc['litpic'];
@me=@me.MfTypedir($son['typedir']).$son['id'].$sonarc;//MfTypedir函数格式化地址
}
{/dede:field.typeid}

遗留问题:php变量的操作出现点障碍。

问题:

取消手机中屏幕拖动事件。
解决:

$("body").bind("touchmove",function(event){
event.preventDefault();
});
$("body").unbind("touchmove");//恢复拖动

 

问题:

织梦CMS各种不明默认数值让我抓狂。

解决:

因为问题出现的时候已经生产,我只有没羞没臊的在各种列表都加了个很大的最小输出量,而避免二次开发,文字默认长度也给了很大的限制。

关于织梦CMS的infolink.lib.php和联动的一些浅见

今天用dede试做一个文章列表的联动功能,发现这东西还挺纠结。

1.默认的貌似是写死的,想改变什么都要改代码。

2.默认的是二级的,可是我只要一级。

3.要改的文件还不止一个。

说到底这个东西最后要改的是一个叫infolink的这个标签,你可以找到infolink.lib.php这个文件,通过对这个文件的修改,可以的达到你的目的。

基本操作我就不说了,我是个写html,php是苦手,看到php文件只能一点点缕逻辑。

如果你跟我的情况一样,可以参考我下面的方法。

建立你自己的联动菜单,并在自己的分类模版中建立相关字段(这里要注意一下,字段的类别要选择联动的,不要选择单选、多选或option)。

在include/taglib/下找到infolink.lib.php并打开。

默认是两个菜单。一个是-地区-对应的名字是-nativeplace-,一个是-信息类型-对应的名字是-infotype-。

如果你想替换一个,你可以拿你的字段名称替换掉这里其中的一个(我在这里全部替换了,其实可以不全部替换,如果你弄不明白就按照我的全部替换…)。

然后在include/下找到arc.sglistview.class.php并打开,同样是全部替换掉相应的字段名。

(替换的时候要注意一下$em_infotypes这种格式写出来的后面有个“s”)

最后你就可以在自己的页面上用了。

用法是与原来的没有大变化

{dede:infolink}{/dede:infolink}

只是在引用变量的时候把人家的[field:nativeplace/]改成自己的[field:自定义字段/]

 

________我华丽么——————

 

然后说一下变成一级的问题,网上查到的不太靠谱,我给个我的方法。

还是include/taglib/下找到infolink.lib.php并打开。

找到

$sontype = ( ($nativeplace% 500 != 0) ? $nametype : 0 );
        $toptype = ( ($nativeplace% 500 == 0) ? $nativeplace: ( $nativeplace-($nametype%500) ) );       
        $fields[‘nativeplace’] = “<a href='{$baseurl}plus/list.php?channelid={$channelid}&tid={$typeid}&nativeplace={$toptype}&infotype={$infotype}’> <b>{$em_nativeplace[$toptype]}</b></a> “;
        foreach($em_nativeplaces as $eid=>$em)
        {
            if($eid < $toptype+1 || $eid > $toptype+499) continue;
            if($eid == $nativeplace) {
                $fields[‘nativeplace’] .= ” <b>{$em}</b>rn”;
            }
            else {
                $fields[‘nativeplace’] .= ” <a href='{$baseurl}plus/list.php?channelid={$channelid}&tid={$typeid}&nativeplace={$eid}&infotype={$infotype}’>{$em}</a>rn”;
          }
 }

注释掉(这个字段名我改过了,)

把上面else前面的内容拿过来就好了,如果你懂点代码的话可以自己加判断来确定哪个是选中的,我就不赘述了,有问题可交流。

 

 

 

关于织梦后台各种白屏问题的解决方法

首先查看你的php版本是不是5.4+,织梦版本是不是V57_Sp1,如果是,或者接近,请往下看。

在你的后台目录下的inc子目录中找到userlogin.class.php文件。

然后注释掉所有跟@session_register@session_unregister有关的语句,并注释掉。

再看看你的页面好使没有~

 

我只是解决了白屏问题,不知道这样注释会不会有后遗症,等待php高能人员解答。