Хостинг с PHP5 и ошибка 500 при eval ()

Хам

Новичок
Хостинг с PHP5 и ошибка 500 при eval ()

Доброго времени суток!
столкнулся с проблемой у друга на сервере. многие популярные CMS (MODx, Drupal и т.д.) не работают по причине неправильной обработки функции eval ().
пример из логов (при установленном MODx):
Код:
[19-Jun-2008 19:09:19] PHP Parse error:  syntax error, unexpected T_VARIABLE in /home/public_html/site.ru/manager/includes/document.parser.class.inc.php(745) : eval()'d code on line 51
админы сервера уверяют, что все это проблемы скриптов, хотя эти же скрипты на других серверах работают замечательно.
в чем может быть причина?
 

kruglov

Новичок
Проблема в 51 строчке кода, который вызывается функцией eval.

Кстати, что-то я не вижу этой строчки вместе с ее соседками в вашем вопросе. Да и сообщение об ошибке вы только наполовину привели, наверное вам нравится предоставлять собеседникам возможность угадывать?
 

kruglov

Новичок
Изыщите возможность вывести evalенный код на экран вместо его выполнения. Или запишите перед выполнением в файл. И смотрите, что там в 51 строке.
 

crocodile2u

http://vbolshov.org.ru
Вот же ж блин... Сколько раз говорено: никогда. не. используйте. евал. нет, все равно используют...
 

Хам

Новичок
так.. баг в коде плагина этой смс нашел... все теперь нормально, но остался вопрос:
почему с этим багом на других хостингах все работало? :)

ЗЫ:
в файле document.parser.class.inc.php есть функция:
PHP:
    function evalPlugin($pluginCode, $params) {
        $etomite= $modx= & $this;
        $modx->event->params= & $params; // store params inside event object
        if (is_array($params)) {
            extract($params, EXTR_SKIP);
        }
        ob_start();
        eval ($pluginCode);
        $msg= ob_get_contents();
        ob_end_clean();
        if ($msg && isset ($php_errormsg)) {
            if (!strpos($php_errormsg, 'Deprecated')) { // ignore php5 strict errors
                // log error
                $this->logEvent(1, 3, "<b>$php_errormsg</b><br /><br /> $msg", $this->Event->activePlugin . " - Plugin");
                if ($this->isBackend())
                    $this->Event->alert("An error occurred while loading. Please see the event log for more information.<p />$msg");
            }
        } else {
            echo $msg;
        }
        unset ($modx->event->params);
    }
которая вызывала плагин:
PHP:
if(isset($_GET['searched']) && isset($_GET['highlight'])) {

  // Set these to customize the text for the highlighting key
  // --------------------------------------------------------
     $termText = '<div class="searchTerms">Search Terms: ';
     $removeText = 'Remove Highlighting';
  // --------------------------------------------------------

  $highlightText = $termText;

  $searched = strip_tags(urldecode($_REQUEST['searched']));
  $highlight = strip_tags(urldecode($_REQUEST['highlight']))
  $output = $modx->documentOutput; // get the parsed document 51 строка ошибка в строке выше - нет точки с запятой

  $body = explode("<body>", $output); // break out the head

  $searchArray = explode(' ', $searched); // break apart the search terms

  $highlightClass = explode(' ',$highlight); // break out the highlight classes

  $i = 0; // for individual class names

  foreach($searchArray as $word) {
    $i++;
    $class = $highlightClass[0].' '.$highlightClass[$i];

    $highlightText .= ($i > 1) ? ', ' : '';
    $highlightText .= '<span class="'.$class.'">'.$word.'</span>';

    $pattern = '/' . preg_quote($word) . '(?=[^>]*<)/i';
    $replacement = '<span class="' . $class . '">${0}</span>';
    $body[1] = preg_replace($pattern, $replacement, $body[1]);
  }

  $output = implode("<body>", $body);

  $removeUrl = $modx->makeUrl($modx->documentIdentifier);
  $highlightText .= '<br /><a href="'.$removeUrl.'" class="ajaxSearch_removeHighlight">'.$removeText.'</a></div>';

  $output = str_replace('<!--search_terms-->',$highlightText,$output);

  $modx->documentOutput = $output;
}
 

fixxxer

К.О.
Партнер клуба
какой ужас

а не работать могло например из за magic quotes. ты что исправил то собственно?

-~{}~ 20.06.08 18:50:

а, увидел. так наверное оно и не работало, просто был выключен display_errors и потому не валилось.
 
Сверху