preg_match():PHP WordPress编译失败

时间:2015-10-12 09:52:13

标签: php wordpress

前几天我提出了一个问题,但得到了一些投票 - 可能是因为答案显而易见。我正在帮助的这个WordPress博客有这个与Permanente链接有关的恼人问题。每次激活时,网站上都会出现以下错误:

preg_match():编译失败:偏移量为73的不匹配括号

我曾尝试在他们的支持社区寻求帮助,但是这个东西比太平间更加死亡,没有人能够帮助或给予支持,所以我决定自己调试它,看看我能做些什么。问题是我对PHP没有多少了解,因为我参与其他项目学习PHP只是为了帮助这个WordPress的东西不是一个可行的想法。也许有人可以在这里提供帮助。

            foreach ( (array) $rewrite as $match => $query ) {
                // If the requesting file is the anchor of the match, prepend it to the path info.
                if ( ! empty($req_uri) && strpos($match, $req_uri) === 0 && $req_uri != $request )
                    $request_match = $req_uri . '/' . $request;
                // LINE 207
                if ( preg_match( "#^$match#", $request_match, $matches ) || preg_match( "#^$match#", urldecode($request_match), $matches ) ) {

                    if ( $wp_rewrite->use_verbose_page_rules && preg_match( '/pagename=\$matches\[([0-9]+)\]/', $query, $varmatch ) ) {
                        // This is a verbose page match, let's check to be sure about it.
                        if ( ! get_page_by_path( $matches[ $varmatch[1] ] ) )
                            continue;
                    }

                    // Got a match.
                    $this->matched_rule = $match;
                    break;
                }

直到几个星期前在网站上安装了SSL时,这种情况还算完美。

1 个答案:

答案 0 :(得分:3)

if ( preg_match( "#^$match#", $request_match, $matches ) || preg_match( "#^$match#", urldecode($request_match), $matches ) ) {

代码行本身并没有错;问题在于变量$match运行时包含的内容。

为了使此代码有效,$match必须是有效的正则表达式。该错误意味着$match包含一个具有错误匹配括号的表达式,这将使其成为无效表达式。

我不知道$match变量的来源(即在程序到达此行之前设置变量的是什么)。如果它是通过您编写的内容输入Wordpress代码,那么这显然取决于您修复。如果它是由Wordpress本身或第三方模块中的某些代码生成的,那么对于该代码的开发人员来说,这是一个错误,您应该向他们报告。

你也可能以某种方式错误配置了模块,在这种情况下修复配置会解决它,但是,它仍然会构成一个错误,因为它意味着模块不是' t正确检查无效配置。