2

2番目のパラメーターとしてクロージャ(匿名)関数を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);

この問題を回避するための提案はありますか。コールバック関数内で$dataItemを使用し、それをに渡す必要がありますpreg_replace_callback。私の開発環境はコードイグナイターです。

4

1 に答える 1

1

無名関数は 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 "";
      }'
    )
);

もちろん、テストされていません。

于 2012-01-23T22:15:47.970 に答える