今天发现在服务器上修改文章时,加入了一张图片,导致文章无法正常显示。查看到是将base64的图片传给服务器后,应用preg_match_all正则替换时,匹配给果为0。
- //$content是文章内容
- $preg = '/
/is';
- preg_match_all($preg, $content, $match);
- if (count($match[0]) > 0) {
- //匹配图片并保存
- }{
- //没有图片
- }
一直以为是$preg写错了,后来一想,可能是本地的win7用phpStudy搭出的环境与正式阿里服务器不一样。
百度了一下【preg_match_all 本地与服务器】,查看到http://www.jb51.net/article/52849.htm 这里的介绍:
如果 preg_match_all()的返回结果是0,则检测是否是配置问题。
- if ($resultsArray === 0){
- echo get_pcre_err();
- }
- function get_pcre_err(){
- $pcre_err = preg_last_error(); // PHP 5.2 and above.
- if ($pcre_err === PREG_NO_ERROR) {
- $msg = 'Successful non-match.';
- } else {
- // preg_match error!
- switch ($pcre_err) {
- case PREG_INTERNAL_ERROR:
- $msg = 'PREG_INTERNAL_ERROR';
- break;
- case PREG_BACKTRACK_LIMIT_ERROR:
- $msg = 'PREG_BACKTRACK_LIMIT_ERROR';
- break;
- case PREG_RECURSION_LIMIT_ERROR:
- $msg = 'PREG_RECURSION_LIMIT_ERROR';
- break;
- case PREG_BAD_UTF8_ERROR:
- $msg = 'PREG_BAD_UTF8_ERROR';
- break;
- case PREG_BAD_UTF8_OFFSET_ERROR:
- $msg = 'PREG_BAD_UTF8_OFFSET_ERROR';
- break;
- default:
- $msg = 'Unrecognized PREG error';
- break;
- }
- }
- return($msg);
- }
果然返回结果是 【PREG_BACKTRACK_LIMIT_ERROR】
再百度了一下PREG_BACKTRACK_LIMIT_ERROR,找到这一篇文章:http://blog.csdn.net/letianok/article/details/8720210 提到,在preg_match_all的开头加入 ini_set("pcre.backtrack_limit",1000000); 提高最大回溯(pcre.backtrack_limit)的递归限制,就可以了。
