2011-12-15 2 views
0

Я работаю с системой, где весь PHP-код хранится в базе данных, чтобы он мог динамически изменяться. Теперь сам код работает отлично, когда отображается на странице, но когда тот же код вызывается с AJAX, он возвращает ошибку 500. Я уже пробовал включить display_errors, без кубиков, и все это сводится к утверждению eval, если оно есть ли у меня ошибка 500, если это не сценарий работает нормально.Ошибка PHP eval при генерации 500 при использовании с AJAX?

<?php 
global $objPDO; 

$objSnippet = $_REQUEST["snippetname"]; 
    $objVariables = $_REQUEST["snippetvariables"]; 
    //var_dump($objPDO); 
    if ($objSnippet == "XHubDiscussion") { 
     $objPDOStatement = $objPDO->prepare("SELECT snippet FROM modx_site_snippets WHERE name = :name LIMIT 1"); 
     $objPDOStatement->bindParam(":name", $objSnippet, PDO::PARAM_STR); 
     if ($objPDOStatement->execute()) { 
      $arrSnippet = $objPDOStatement->fetch(PDO::FETCH_ASSOC); 
      extract($objVariables); 
      //var_dump($arrSnippet); 
      if (FALSE === eval($arrSnippet["snippet"])) { 
       var_dump("dis also be ronk"); 
      } 
     } else { 
      var_dump("Ronk!"); 
     } 
    } 
?> 

Да, я проверил все троицы, если оценка eval прокомментирована, она отлично реагирует. Выполненный код:

<?php 
require_once($_SERVER["DOCUMENT_ROOT"] . "/assets/snippets/xhub/xhub.snippet.php"); 

    global $arrXHubUserCollection; 
    $objXHubS = new xHub\security; 
    $intPageID = $modx->documentIdentifier; 

    if (isset($intXHubPageID)) { 
     $intPageID = (int)$intXHubPageID; 
    } 

    $arrXHubThread = $objXHubS->DiscussionGetThreads(array($intPageID)); 
    $arrMessageFetch = array((int)$arrXHubThread[0]["id"]); 
    if (isset($intXHubPosttime)) { 
     $arrMessageFetch[] = (int)$intXHubPosttime; 
    } 
    $arrXHubMessages = $objXHubS->DiscussionGetMessages($arrMessageFetch); 
    $arrXHubUserGroupRelation = $objXHubS->DashboardMessageControl("UserGetGroupRelationship", array()); 

    $strPageViewer = '<div class="clear XHubPageViewer" style="padding:10px;"></div>'; 
    if (!isset($intXHubPosttime)) { 
     echo XHubTraverseMessages($arrXHubThread, false); 
     echo $strPageViewer; 
     echo '<div id="XHubConversation">'; 
    } 
    echo XHubTraverseMessages($arrXHubMessages, true); 
    if (!isset($intXHubPosttime)) { 
     echo '</div>'; 
     echo $strPageViewer; 
     if (is_array($arrXHubUserGroupRelation)) { 
      echo '<div class="EPcomment XHubEditField" style="position:inline;z-index:1000;display:block;border-radius:10px;border:1px solid #C7D7D3;background-color:#DEEBE8;margin:0px;padding:0px;"> 
       <div> 
        <a onclick="XHubMessageEditor(this.parentNode.parentNode);" href="javascript:;" class="ButtonYellowSmall">Bearbeiten!</a> 
       </div> 
       <div> 
        <textarea style="width:97%;"></textarea> 
       </div> 
      </div>'; 
     } 
    } 

    function XHubTraverseMessages ($arrMessages, $blnXHubComment) { 
     global $arrXHubUserCollection, $objXHubS; 
     $strMessageAssembly = ""; 
     foreach ($arrMessages as $arrMessage) { 
      $intXHubUserID = (int)$arrMessage["postid"]; 
      if (!isset($arrXHubUserCollection[$intXHubUserID])) { 
       $arrXHubUser = $objXHubS->DashboardRetrieve(array($intXHubUserID)); 
       $arrXHubUser["username"][0] = $objXHubS->UserGetNameFromID($intXHubUserID); 
       $arrXHubUser["userid"][0] = $intXHubUserID; 
       $arrXHubUserCollection[$intXHubUserID] = $arrXHubUser; 
      } 
      $strMessageAssembly .= XHubCreateMessageField($arrMessage, $arrXHubUserCollection[$intXHubUserID], $blnXHubComment); 
     } 
     return $strMessageAssembly; 
    } 
    function XHubCreateMessageField ($arrMessage, $arrUser, $blnXHubComment) { 
     $strXHubDebatArrow = '<div class="DebatArrow">&nbsp;</div>'; 
     $strXHubCommentArrow = '<div class="EPcommentArrow">&nbsp;</div>'; 
     $strXHubThreadBox = '<div class="BoxGreen width500 right Debatbox MessageField">'; 
     $strXHubCommentBox = '<div class="EPcomment BoxGray MessageField"><p class="lefttop">Antwort</p>'; 

     $strXHubMessageContainer = '<div class="clear' . ($blnXHubComment ? " XHubMessages" : " XHubInitThread") . '" id="' . $arrMessage["id"] . ($blnXHubComment ? "" : "D") . '">'; 
     $strXHubMessage = ($blnXHubComment ? $strXHubCommentBox : $strXHubThreadBox) . 
       '<div class="XHubPostTime" style="display:none">' . $arrMessage["posttime"] . '</div>' . 
       '<p class="righttop">' . date("d-m-Y", $arrMessage["posttime"]) . ' um ' . date("H:i", $arrMessage["posttime"]) . ' Uhr</p>' . 
       '<p class="message">' . $arrMessage["message"] . '</p>' 
       . ($blnXHubComment ? $strXHubCommentArrow : $strXHubDebatArrow) . 
       '</div>'; 
     $strXHubUser = ' 
      <div class="epUser"> 
       <p class="username"><a href="expertenpanel/benutzer/' . $arrUser["username"][0] . '" target="_blank">' . $arrUser["username"][0] . '</a></p> 
       <img class="profilbild" src="' . $arrUser["imglink"][0] . '" /> 
       [[getExpertenInfo? &userID=`' . $arrUser["userid"][0] . '` &type=`logo`]] 
       <p class="userinfo"> 
        <span class="status">[[getExpertenInfo? &userID=`' . $arrUser["userid"][0] . '` &type=`status`]]</span> 
        [[getExpertenInfo? &userID=`' . $arrUser["userid"][0] . '` &type=`showPunkte`]] 
       </p> 
      </div> 
     '; 
     $strXHubMessageContainer .= ($blnXHubComment ? $strXHubMessage . $strXHubUser : $strXHubUser . $strXHubMessage); 
     $strXHubMessageContainer .= '</div>'; 
     return $strXHubMessageContainer; 
    } 
?> 

ответ

2

Это старый вопрос, но надеюсь, что это поможет кому-то.
Весь код, который должен быть evaled должны быть экранированы и цитировал, как показано ниже:

@eval("\$varA = \"$varB\";"); 

Если это что-то вроде ниже это не получится:

@eval("\$varA = $varB;"); 

Как PHP.net говорит, что это опасно использовать «eval», поэтому убедитесь, что вы не используете его, если вам это действительно нужно.

+1

Как уже говорилось выше, не забудьте избегать использования eval любой ценой, это не только не рекомендуется самим PHP, но и очень легко вводить код. –

Смежные вопросы