PHP 闭包函数作为 preg_replace_callback 的参数导致内部服务器错误 500

发布于 2024-12-28 19:07:26 字数 579 浏览 0 评论 0原文

我有一个 preg_replace_callback ,它将闭包(匿名)函数作为第二个参数,它在本地工作得很好,但是当我将它部署到实时环境时,它会导致错误=>;内部服务器错误 500。当我删除 Closure 时,它​​可以工作。

$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);

任何建议我如何解决这个问题。我需要在回调函数中使用 $dataItem 并将其传递给 preg_replace_callback。 我的开发环境是code igniter。

I have a preg_replace_callback which takes a closure (anonymous) function as 2nd parameter and it works perfectly fine on local, but when I deploy it to live environment it results in error => Internal server error 500. When i remove the Closure it works.

$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);

Any suggestions how can i work arround this problem. I need to use $dataItem inside my callback function and pass it to preg_replace_callback.
My development environment is code igniter.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

两个我 2025-01-04 19:07:26

匿名函数仅适用于 PHP 5.3 及更高版本。您可以使用 create_function() 代替:

$regExPattern = '/\<%(?<content>.*?)%\>/';
$template = preg_replace_callback($regExPattern, create_function(
      '$matches'
    , 'if(isset($dataItem[trim($matches[\'content\'])])) {
          return $dataItem[trim($matches[\'content\'])];
      }
      else {
          return "";
      }'
    )
);

当然,未经测试。

Anonymous functions only work in PHP 5.3 and up. You could use create_function() instead:

$regExPattern = '/\<%(?<content>.*?)%\>/';
$template = preg_replace_callback($regExPattern, create_function(
      '$matches'
    , 'if(isset($dataItem[trim($matches[\'content\'])])) {
          return $dataItem[trim($matches[\'content\'])];
      }
      else {
          return "";
      }'
    )
);

Untested, of course.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文