Php闭包函数作为preg_replace_回调的参数会导致内部服务器错误500

Php闭包函数作为preg_replace_回调的参数会导致内部服务器错误500,php,callback,preg-replace,closures,internal-server-error,Php,Callback,Preg Replace,Closures,Internal Server Error,我有一个preg_replace_callback,它接受一个闭包(匿名)函数作为第二个参数,它在本地运行得非常好,但是当我将它部署到实时环境时,它会导致错误=>内部服务器错误500。当我拆下封口时,它就工作了 $regExPattern = '/\<%(?<content>.*?)%\>/'; $template = preg_replace_callback($regExPattern, function ($matches) use ($dataItem) {

我有一个
preg_replace_callback
,它接受一个闭包(匿名)函数作为第二个参数,它在本地运行得非常好,但是当我将它部署到实时环境时,它会导致错误=>内部服务器错误500。当我拆下封口时,它就工作了

$regExPattern = '/\<%(?<content>.*?)%\>/';
$template = preg_replace_callback($regExPattern, function ($matches)  use ($dataItem) {
    if(isset($dataItem[trim($matches['content'])])) {
        return $dataItem[trim($matches['content'])];
    }
    else {
        return '';
    }
}, $template);
$regexpatern='/\/';
$template=preg\u replace\u回调($regexpatern,函数($matches)use($dataItem){
如果(isset($dataItem[trim($matches['content']))])){
返回$dataItem[trim($matches['content']);
}
否则{
返回“”;
}
}美元模板);
任何关于我如何解决这个问题的建议。我需要在回调函数中使用$dataItem,并将其传递给
preg\u replace\u callback

我的开发环境是CodeIgniter。

匿名函数仅适用于PHP5.3及以上版本。您可以使用
创建函数()

$regExPattern = '/\<%(?<content>.*?)%\>/';
$template = preg_replace_callback($regExPattern, create_function(
      '$matches'
    , 'if(isset($dataItem[trim($matches[\'content\'])])) {
          return $dataItem[trim($matches[\'content\'])];
      }
      else {
          return "";
      }'
    )
);
$regexpatern='/\/';
$template=preg\u replace\u回调($regexpatern,create\u函数(
“$matches”
,'if(isset($dataItem[trim($matches[\'content\'))])){
返回$dataItem[trim($matches[\'content\']);
}
否则{
返回“”;
}'
)
);

当然,未经测试。

您的生产服务器没有输出错误,这是一个很好的设计。你能检查错误日志并告诉我们实际的错误是什么吗?有没有可能你的开发环境中没有PHP5.3?比如@boobiq,我猜很有可能你的服务器没有使用PHP5.3。是的,你是对的,PHP5.2.17版。您能帮我将一个函数传递给preg_replace_回调,并在其中包含$dataItem吗?谢谢。但我不喜欢把代码写成字符串。因此,我传递了类似数组的函数($this,'functionName'),并在类的主体中声明了它:private function functionName。谢谢:)是的,那将是另一种选择。我不确定它是否适用于私有函数,但我想您已经测试过了。