问题
升级PHP7之后,点击wordpress后台Baidu Sitemap插件中的“update xml file”后没有效果,且网页空白,通过F12大法查看到有文件500错误
解决-日志查看
首先监控apache的该站点错误日志,刷新页面重新提交,查看是否有错误日志刷新
tail -f cloudcared.cn/cloudcared.cn-error_log
刷新后无新日志生成,则该错误不是apache问题导致
监控PHP日志
tail -f /var/log/php-fpm/www-error.log
可以清楚的看到网页刷新后,PHP报出了不支持的函数类型错误,查看该对应的PHP文件,并修改split函数
定位至439行
list( $today_year, $today_month, $today_day, $hour, $minute, $second ) = split( '([^0-9])', $blogtime );
修改为:
list( $today_year, $today_month, $today_day, $hour, $minute, $second ) = preg_split( '([^0-9])', $blogtime );
再次尝试更新xml文件
总结
通过相关资料查看后得知:
PHP 的 split()非常方便, 但是 PHP 5.3.0 后,不建议再使用 split(), 在使用上会出现警告信息,甚至错误。
所以下述是不建议使用的 Function (POSIX), 与建议替换成的 Function (PCRE) 列表
POSIX → PCRE
ereg_replace() → preg_replace()
ereg() → preg_match()
eregi_replace() → preg_replace()
eregi() → preg_match()
split() → preg_split()
spliti() → preg_split()
sql_regcase() → No equivalent
PHP split() 替代方案
需要 regex 的 split, 可用 preg_split ()代替
不需要 regex, 只要要快速分割固定的字串, 可用 explode()代替. (速度会比需要 regex 的快很多)