5

を使用eval($code_to_check);することで、この値が等しいかどうかを確認できFALSE、等しい場合はスクリプトの実行を停止できることがわかっています。ただし、私が直面している問題は、関数が2回呼び出されるため、関数を定義できないことです... eval() チェックで処理され、構文エラーがないことを確認し、関数を再度処理します。しかし、この関数はすでに eval された関数で宣言されているため、この関数を再宣言できないことを示すエラーが表示されます。EVAL された関数で何かを宣言しないようにするにはどうすればよいでしょうか、または実際に呼び出す前に eval() 関数で宣言されたすべての宣言を取り消すことができます...

とにかく、ここに私がこれまで取り組んでいるものがあります... $content(phpコード)に関数がある場合、「CAN NOT REDECLARE FUNCTION」が表示されるため、助けを借りることができます。

// PHP Syntax errors?
if (!@eval('return true;' . $content))
{
    // Error found in PHP somewhere.  Call error function and return out of here!
    call_user_func_array($code_error['function'], $code_error['params']);
    return;
}
else
{
    ob_start();

    eval($content);
    $code = ob_get_contents();
    ob_end_clean();
}

誰でもここで私を助けてもらえますか? みんなありがとう、ここでみんなとても親切です!皆さんは金メダルに値しますが、オリンピックは終わってしまい、まだスポーツとは言えません...


わかりました、私はここで自分の答えを試みていますが、これでもエラーをキャッチし、これらの関数を 2 回呼び出さずに関数を同時に作成できるかどうか疑問に思っています。これはこれを行う適切な方法ですか?? このコードに問題がある可能性はありますか? 構文エラーが検出されない場合、$eval_code をエコーし​​ます...これで問題ありませんか?

$eval_code = @eval($content);
// PHP Syntax errors?
if ($eval_code === FALSE)
{
    call_user_func_array($code_error['function'], $code_error['params']);
    return;
}
else
{
    ob_start();
    echo $eval_code;
    $code = ob_get_contents();
    ob_end_clean();
}
4

4 に答える 4

4
$checkResult = exec('echo \'<?php ' . escapeshellarg($code_to_check) . '\' | php -l >/dev/null 2>&1; echo $?');
if ($checkResult != 0) {
    throw new \RuntimeException("Invalid php");
} else {
   $result = eval($code_to_check);
}
于 2014-07-22T08:50:52.430 に答える