0

Modx と最新バージョンの PHP で少し問題が発生しました。

これは非常に古いバージョンの Modx です (聞かないでください - 私もまったく同じ考えを持っていますが、自分ではどうすることもできませんでした)。サイトは PHP 5.2 で正常に動作しています。

問題は、Web ホストが PHP 5.4 にアップグレードされていることです。その結果、サイトが完全に機能しなくなります。私が解決策を得ることができない 1 つの問題は、「evalSnippet()」関数の下で manager/includes/document.parser.class.inc.php 内で eval を使用し、減価償却された eval() 関数を呼び出すことです。

Modx を最新の 1.0.9 にアップグレードする可能性を調べましたが、これはまだ eval() を使用しています -> このバージョンは PHP 5.4 をサポートしていると明示的に述べていますが。以下はコードです:

function evalSnippet($snippet, $params) {
    $etomite= $modx= & $this;

    $modx->event->params= & $params; // store params inside event object
    if (is_array($params)) {
        extract($params, EXTR_SKIP);
    }
    ob_start();
    $snip= eval ($snippet);
    $msg= ob_get_contents();
    ob_end_clean();
    if ((0<$this->config['error_reporting']) && isset($php_errormsg))
    {
        $error_info = error_get_last();
        if($error_info['type']===2048 || $error_info['type']===8192) $error_type = 2;
        else                                                         $error_type = 3;
        if(1<$this->config['error_reporting'] || 2<$error_type)
        {
            extract($error_info);
            if($msg===false) $msg = 'ob_get_contents() error';
            $result = $this->messageQuit('PHP Parse Error', '', true, $type, $file, 'Snippet', $text, $line, $msg);
            if ($this->isBackend())
            {
                $this->event->alert("An error occurred while loading. Please see the event log for more information<p>{$msg}{$snip}</p>");
            }
        }
    }
    unset ($modx->event->params);
    return $msg . $snip;
}

このあたりにアウェイはありますか?Modx Evo を PHP 5.4 で動作させることができた人はいますか?

4

1 に答える 1

1

元記事へのコメントの続き…

session_is_registered()PHP 5.3 で非推奨になりました。スニペットを調べて、この関数を使用しているスニペットを見つけてから、 に置き換える必要がありisset($_SESSION['name_of_variable'])ます。

それを見つける最も簡単な方法は%LIKE%、phpMyAdmin で検索を実行することですsession_is_registeredmodx_site_snippets table

于 2013-03-27T23:00:09.030 に答える