前几天我提出了一个问题,但得到了一些投票 - 可能是因为答案显而易见。我正在帮助的这个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时,这种情况还算完美。
答案 0 :(得分:3)
if ( preg_match( "#^$match#", $request_match, $matches ) || preg_match( "#^$match#", urldecode($request_match), $matches ) ) {
代码行本身并没有错;问题在于变量$match
运行时包含的内容。
为了使此代码有效,$match
必须是有效的正则表达式。该错误意味着$match
包含一个具有错误匹配括号的表达式,这将使其成为无效表达式。
我不知道$match
变量的来源(即在程序到达此行之前设置变量的是什么)。如果它是通过您编写的内容输入Wordpress代码,那么这显然取决于您修复。如果它是由Wordpress本身或第三方模块中的某些代码生成的,那么对于该代码的开发人员来说,这是一个错误,您应该向他们报告。
你也可能以某种方式错误配置了模块,在这种情况下修复配置会解决它,但是,它仍然会构成一个错误,因为它意味着模块不是' t正确检查无效配置。