2 Stimmen

PHP Closure-Funktion als Parameter für preg_replace_callback führt zu Internal Server Error 500

Ich habe einen preg_replace_callback, der eine Closure (anonyme) Funktion als 2. Parameter übernimmt und lokal einwandfrei funktioniert. Wenn ich es jedoch in die Live-Umgebung deploye, führt dies zu einem Fehler => Interner Serverfehler 500. Wenn ich die Closure entferne, funktioniert es.

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

Haben Sie Vorschläge, wie ich dieses Problem umgehen kann? Ich muss $dataItem innerhalb meiner Callback-Funktion verwenden und es an preg_replace_callback übergeben. Meine Entwicklungsumgebung ist CodeIgniter.

3 Stimmen

Dein Produktions-Server gibt den Fehler nicht aus, was ein gutes Design ist. Kannst du das Fehlerprotokoll überprüfen und uns mitteilen, was der tatsächliche Fehler ist?

1 Stimmen

Besteht die Möglichkeit, dass Sie in Ihrer Entwicklungsumgebung kein PHP 5.3 haben?

0 Stimmen

Wie @boobis vermute ich, dass es sehr wahrscheinlich ist, dass Ihr Server nicht PHP 5.3 verwendet.

1voto

Arjan Punkte 9518

Anonyme Funktionen funktionieren nur in PHP 5.3 und höher. Du könntest stattdessen create_function() verwenden:

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

Natürlich nicht getestet.

1 Stimmen

Vielen Dank. Aber ich mag es nicht wirklich, Code als Zeichenkette zu schreiben. Deshalb habe ich die Funktion als Array($this, 'functionName') übergeben und sie im Körper der Klasse deklariert: private function functionName. Vielen Dank :)

0 Stimmen

Ja, das wäre die andere Alternative. Ich bin mir nicht sicher, ob es mit privaten Funktionen funktioniert, aber ich vermute, Sie haben getestet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X