WordPress升级PHP7后白屏

2016-4-8 17:40:14

把bmclapi安顿到其他服务器上后,这台服务器终于有内存跑第二个fpm了,所以决定安装一下php7,让dz跑在5.5的fpm上,单独给wp上7

安装完成后发现首页白屏,但是error_log里没有输出,即使打开WP_DEBUG,也只有几个Notice和Deprecated,按理来说不应该会导致白屏。

直接输入url进入文章页面终于有报错了,报错信息是called undefined function eregi(),没有堆栈

查了一下这个函数的文档http://php.net/eregi

Warning This function was DEPRECATED in PHP 5.3.0, and REMOVED in PHP 7.0.0.

这是个从5.3开始被弃用,7里直接移除的函数,然而并没有堆栈,所以只好去目录下执行grep -R eregi *

跑完发现是statpresscn这个插件使用了这个函数六遍

于是编辑/wp-content/plugins/statpresscn/statpresscn.php文件

用preg_match函数替代掉eregi的功能

修改2570行

        if($_POST['statpress_updatesets_banip']!='') {
            $results = 0;
            $lines = file(ABSPATH.'wp-content/plugins/'.dirname(plugin_basename(__FILE__)).'/def/banips.dat');
            foreach($lines as $line_num => $banip) {
                if (preg_match("@^(\d{1,3}\.\d{1,3}\.\d{1,3}\.(?:\d{1,3})?)(\s+evil)?$@i",trim($banip),$matches)) {
                    $iprule = $matches[1];
                    if(strlen(rtrim($iprule)) > 0) {
                        $results += $wpdb->query( "DELETE FROM " . $table_name . " WHERE ip like '$iprule%'");
                    }
                }
            }

修改2488-2492行

    // URL (requested)
    $urlRequested=iri_StatPress_URL();
    if (preg_match("/ver=2.0/i", $urlRequested)) { return ''; }
    if (preg_match("/.ico$/i", $urlRequested)) { return ''; }
    if (preg_match("/favicon.ico/i", $urlRequested)) { return ''; }
    if (preg_match("/.css$/i", $urlRequested)) { return ''; }
    if (preg_match("/.js$/i", $urlRequested)) { return ''; }
    if (stristr($urlRequested,"/wp-admin") != FALSE) { return ''; }
    if (stristr($urlRequested,"/wp-includes") != FALSE) { return ''; }
    if (stristr($urlRequested,"/wp-content/plugins") != FALSE) { return ''; }
    if (stristr($urlRequested,"/wp-content/themes") != FALSE) { return ''; }