背景
重新安装了最新版本的typecho(2018-01)版本的typecho
服务器:Centos6.8
环境:php5.6+mysql5.7
验证插件:golinks(链接转换)/spider(看名字知道它的作用:爬虫)
错误场景:安装插件后,没有安装错误信息,也就是成功安装,但是打开插件的管理界面,整个浏览器里面:url变了,界面顶部导航栏也还有,但是下面一片空白。完全不知道发生了什么。
下面让我实力(瞎猜)分析一波:
声明一下:我没有任何typecho基础。
首先:通过观察 发现url变了,说明进入插件了。
然后根据url的后面几位:p***.php, 可以判断出 它打开的是插件里面的 P***.php(其实完全是瞎猫碰上死耗子了--赶巧了)
打开这个文件,看到文件里面都是:
php和html的混合体,于是找了一个空白地方加了一行代码:<?php echo 'aaaaa';?>
加完这行代码,上传到服务器,再次运行界面发现代码没有aaaa没有出来,可以断定是没有运行到这里,于是把这行代码向上移动几行,找个空白地方,重复试试,最后发现就是如下代码的问题:
<?php if($notice->have() && in_array($notice->noticeType, array('success', 'notice', 'error'))): ?>
<div class="container message <?php $notice->noticeType(); ?> popup typecho-radius-topleft typecho-radius-topright typecho-radius-bottomleft typecho-radius-bottomright">
<ul>
<?php $notice->lists(); ?>
</ul>
</div>
<?php endif; ?>
就是这段代码,程序运行到这里就自动死了。通过代码里面的if可知是一个条件判断,于是又打印了里面的条件$notice,发现它没有值,通过代码名称猜测可能是错误警示。干脆一不做二不休,把代码删除了(请不要学我),删除完再次运行,完美,插件可以用了。那么到这里就结束了吗?
当然没有结束!!!
因为不懂typecho,心里怕出事,所以把代码恢复过来,思考了一番:这里是判断这个值的,而这个值不存在,所以程序走到这里就死了,那么我是不是可以在没有这个值的情况下绕过这里呢?有值就走这里呢?
当当当当,下面改良版的代码就出来了:
<?php if(isset($notice)): ?>
<?php if($notice->have() && in_array($notice->noticeType, array('success', 'notice', 'error'))): ?>
<div class="container message <?php $notice->noticeType(); ?> popup typecho-radius-topleft typecho-radius-topright typecho-radius-bottomleft typecho-radius-bottomright">
<ul>
<?php $notice->lists(); ?>
</ul>
</div>
<?php endif; ?>
<?php endif; ?>
上传改良后的代码,运行之后,我完全想不到用什么词语形容了,卧槽,真的可以运行,可以完美的跑起来。我爱你,代码。
评论 (0)