PHP 7.x preg_replace替换了ereg_replace,D8主题崩坏

2017-11-02 12:58:07来源:http://www.slyar.com/blog/php7-preg-replace-replace-ereg-rep作者:Slyar Home人点击

分享


文章作者:姜南(Slyar)
文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作。


说什么好呢,一个付费主题bug这么多,作者也不修改。PHP升级到7.x版本以后主题就崩溃了,看了一眼error log真是鲜血淋漓


2017/11/01 04:46:39 [error] 14987#0: *38 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught Error: Call to undefined function ereg_replace() in /不给看/wp-content/themes/d8/header.php:69


ereg_replace: This function was DEPRECATED in PHP 5.3.0, and REMOVED in PHP 7.0.0. (传送门
)


ereg_replace() 的问题,这个东西在PHP 7.x以后就不存在了。匹配语法也从ereg syntax (POSIX)改成了preg syntax (PCRE)。修复方法也很简单,把所有的ereg_replace()和对应的匹配表达式都换成preg_replace()标准就好了


[root@slyar-gcp d8]# grep -nr "ereg_replace(/"<div/[^>/]/*><ul/[^>/]/*>/"" ./
./pages/tags.php:11:            <?php echo str_replace("</ul></div>", "", ereg_replace("<div[^>]*><ul[^>]*>", "", wp_nav_menu(array('theme_location' => 'pagemenu', 'echo' => false)) )); ?>
./pages/readers.php:22:         <?php echo str_replace("</ul></div>", "", ereg_replace("<div[^>]*><ul[^>]*>", "", wp_nav_menu(array('theme_location' => 'pagemenu', 'echo' => false)) )); ?>
./pages/tougao.php:11:          <?php echo str_replace("</ul></div>", "", ereg_replace("<div[^>]*><ul[^>]*>", "", wp_nav_menu(array('theme_location' => 'pagemenu', 'echo' => false)) )); ?>
./pages/page.php:12:            <?php echo str_replace("</ul></div>", "", ereg_replace("<div[^>]*><ul[^>]*>", "", wp_nav_menu(array('theme_location' => 'pagemenu', 'echo' => false)) )); ?>
./pages/archives.php:11:            <?php echo str_replace("</ul></div>", "", ereg_replace("<div[^>]*><ul[^>]*>", "", wp_nav_menu(array('theme_location' => 'pagemenu', 'echo' => false)) )); ?>
./pages/links.php:11:           <?php echo str_replace("</ul></div>", "", ereg_replace("<div[^>]*><ul[^>]*>", "", wp_nav_menu(array('theme_location' => 'pagemenu', 'echo' => false)) )); ?>
./header.php:69:            <?php echo str_replace("</ul></div>", "", ereg_replace("<div[^>]*><ul[^>]*>", "", wp_nav_menu(array('theme_location' => 'nav', 'echo' => false)) )); ?>

作者我真是。。。服了你了,你写个函数重复用会死么!会!死!么!


请把所有的


ereg_replace("<div[^>]*><ul[^>]*>"

都替换成


preg_replace("/<div[^>]*><ul[^>]*>/"

就好了。。。


(sed表达式太复杂我就不写了,只有7、8个手工改了就行了,要是有几十个那得是脚本改,醉了...)


最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台